Ampersand.js Each Utility

raw JSON →
1.0.1 verified Wed Apr 22 auth: no javascript abandoned

amp-each is a lightweight JavaScript utility module, part of the ampersand.js project, designed to provide an iteration function similar to `Array.prototype.forEach` or `_.each` from Lodash. It allows iterating over both arrays and objects, applying a callback function to each element or property. The ampersand.js ecosystem, from which amp-each originates, was popular around 2015-2017 as a modular alternative to larger frameworks like Backbone.js, favoring CommonJS modules for client-side applications. However, the project appears to be largely unmaintained, with its core modules having last seen significant updates many years ago (e.g., ampersand-state last published 8 years ago from October 2017). This package, at version 1.0.1, should be considered abandoned, lacking recent updates, active development, or a clear release cadence. Its primary differentiator was being part of a "non-frameworky" collection of modules, offering granular control over application structure.

error ReferenceError: require is not defined
cause Attempting to use `require('amp-each')` in a JavaScript file that is being interpreted as an ES module (e.g., due to `"type": "module"` in `package.json` or a `.mjs` extension).
fix
Change the file to a CommonJS module (e.g., rename to .cjs, remove "type": "module" from package.json, or configure your build system). Alternatively, use a dynamic import (import('amp-each').then(mod => mod)), though this package is not designed for it.
error TypeError: (0 , amp_each_1.default) is not a function
cause Incorrect ES module import (`import each from 'amp-each'`) for a CommonJS module that exports a single function directly (not as a default object property).
fix
If transpilation is in place, try import * as each from 'amp-each'; and then use each.default(collection, fn). However, the recommended fix is to revert to const each = require('amp-each');.
error TypeError: each is not a function
cause The `amp-each` module was imported incorrectly, or the variable `each` was not assigned the exported function. This can happen with incorrect `require()` syntax or failed ES module imports.
fix
Ensure the import is const each = require('amp-each'); for CommonJS, or verify your bundler's configuration if using ES modules in a browser context.
breaking The entire ampersand.js project, including `amp-each`, appears to be abandoned. It has not seen updates in many years and lacks active maintenance, posing risks for security and compatibility with modern environments.
fix Consider replacing with native JavaScript methods (e.g., `Array.prototype.forEach`, `Object.keys().forEach`) or a actively maintained utility library like Lodash (`_.each`).
gotcha This package is exclusively a CommonJS (CJS) module. Attempting to use ES module `import` syntax will result in runtime errors in environments that don't specifically transpile CJS to ESM.
fix Ensure you use `const each = require('amp-each');` for Node.js environments or configure your bundler (e.g., Webpack, Rollup) to handle CJS modules if targeting browsers.
gotcha Modern JavaScript environments provide native iteration alternatives (e.g., `Array.prototype.forEach`, `Object.keys().forEach`, `for...of` loops) that offer similar functionality, often with better performance and native support, making this package largely redundant in current development.
fix Prefer native JavaScript iteration methods for better maintainability, performance, and reduced bundle size.
gotcha The package does not ship with TypeScript definitions. Using it in a TypeScript project will require manual type declarations or using `any`, leading to a loss of type safety.
fix If you must use this library, install `@types/amp-each` if available (unlikely due to abandonment) or create a custom declaration file (e.g., `amp-each.d.ts`) to provide type information.
npm install amp-each
yarn add amp-each
pnpm add amp-each

Demonstrates how to use `amp-each` to iterate over arrays and objects, applying a callback function to each element or property, and passing a context object.

const each = require('amp-each');

// Example 1: Iterating over an array
const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = [];

each(numbers, function (num, index) {
  doubledNumbers.push(num * 2);
  console.log(`Array item at index ${index}: ${num}`);
});
console.log('Doubled Numbers:', doubledNumbers);

// Example 2: Iterating over an object
const user = {
  name: 'Alice',
  age: 30,
  city: 'New York'
};

console.log('\nUser details:');
each(user, function (value, key) {
  console.log(`${key}: ${value}`);
});

// Example 3: Using 'this' context (if the function supports it, which 'amp-each' typically would)
const contextObject = { multiplier: 10 };
const multipliedNumbers = [];

each(numbers, function (num) {
  multipliedNumbers.push(num * this.multiplier);
}, contextObject);
console.log('Multiplied by context:', multipliedNumbers);