Ampersand.js Each Utility
raw JSON →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
error ReferenceError: require is not defined ↓
.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 ↓
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 ↓
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 wrong
import each from 'amp-each';correctconst 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);