JSPM

deep-iterate

0.0.2
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q11536F
  • License MIT

Iterate through multidimensional arrays and arrays nested in objects e.g. "days.data.jobs[0]".

Package Exports

  • deep-iterate

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (deep-iterate) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Deep-Iterate

Iterate through multidimensional arrays and arrays nested in objects e.g. "days.workLog.jobs" where days and jobs are arrays and workLog is a nested object.

Caution!

Iterating over a multidimensional array can be slow and will block your application from doing any other processing whilst it's running. Please use sparingly.

Quick Start

Here's a simple example to get you started:

const deepIterate = require(`deep-iterate`);

const jobsPerDay = [{
    dayName: `Monday`,
    someObject: {
        someProp: `abc`,
        jobs: [87392, 12348, 47209, 94872],
    },
}, {
    dayName: `Tuesday`,
    someObject: {
        someProp: `def`,
        jobs: [26348, 59272, 69390],
    },
}, {
    dayName: `Wednesday`,
    someObject: {
        someProp: `ghi`,
        jobs: [18340],
    },
}];

// Iterate over the given path, passing the values from the arrays "jobsPerDay" and "jobs" to the iteratee.
deepIterate(jobsPerDay, `jobsPerDay.someObject.jobs`, (day, job) => {
    console.log(`${day.dayName}: ${job}`);
});

// Iterate over the given path, passing the values from every level to the iteratee.
deepIterate.withAllLevels(jobsPerDay, `jobsPerDay.someObject.jobs`, (day, someObject, job) => {
    console.log(`${day.dayName}: (${someObject.someProp}) ${job}`);
});

Important Notes

A few things to take note of:

  • The path must include the name of the variable, for example if you have an array called days the first part of the path must be days..
  • The first and last part of the path must be arrays whilst the middle of the path can be either objects or arrays, for example array1.someObject.anotherObject.array2.
  • The iteratee function is called for every element in the most deeply nested array, for example with the path array1.array2, the iteratee will be called for every element in array2.
  • Can be used to iterate over a unidimensional array but will incur a performance penalty. You'd be better off calling .forEach() on your array.

API Overview

deepIterate(input, path, iteratee);

Takes a multidimensional array and a period-delimited path (e.g. days.workLog.jobs) to iterate over. The iteratee will be called for every element in the most deeply nested array (e.g. jobs) and will be passed parameters for every array it encountered along the path. See the quick start example above or run the example with: node ./examples/basicExample.js.

Iteratee Signature: iteratee(array1, array2, ...arrayN)

deepIterate.withAllLevels(input, path, iteratee)

Takes a multidimensional array and a period-delimited path (e.g. days.workLog.jobs) to iterate over. The iteratee will be called for every element in the most deeply nested array (e.g. jobs) and will be passed parameters for every object OR array it encountered along the path. See the quick start example above or run the example with: node ./examples/basicExample.js.

Iteratee Signature: iteratee(level1, level2, ...levelN)