Ampersand.js Each Utility
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.
Common errors
-
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).fixChange 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. -
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).fixIf 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');`. -
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.fixEnsure the import is `const each = require('amp-each');` for CommonJS, or verify your bundler's configuration if using ES modules in a browser context.
Warnings
- 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.
- 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.
- 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.
- 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.
Install
-
npm install amp-each -
yarn add amp-each -
pnpm add amp-each
Imports
- each
import each from 'amp-each';
const each = require('amp-each');
Quickstart
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);