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
pathmust include the name of the variable, for example if you have an array calleddaysthe first part of the path must bedays.. - 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 inarray2. - 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)