41

Is there a method in lodash to map over an array of arrays

I would like to do something like this so that it keeps the structure of the array.

def double(x) { return x*2 }

_([[1,2],[3,4]]).somemethod(double) == [[2,4],[6,8]]

6 Answers 6

48

Just _.map it twice:

var array = [[1, 2], [3, 4]];
var doubledArray = _.map(array, function (nested) {
    return _.map(nested, function (element) {
        return element * 2;
    });
});

Or without lodash:

var doubledArray = array.map(function (nested) {
    return nested.map(function (element) {
        return element * 2;
    });
});

Furthermore, consider using es6 arrow functions:

var doubledArray = array.map(nested => nested.map(element => element * 2));
Sign up to request clarification or add additional context in comments.

Comments

18

You can make your code much cleaner with ES2015 arrow functions:

var array = [[1, 2], [3, 4]];
var double = x => x * 2;
var doubledArray = _.map( array, subarray => _.map( subarray, double ));

Using vanilla JS:

var array = [[1, 2], [3, 4]];
var double = x => x * 2;
var doubledArray = array.map( subarray => subarray.map( double ));

2 Comments

Assuming the target environment supports them and/or they transpile it with something like Babel.
arrow functions have nothing to do with his question.
9

It's much more elegant to use the es6 destructuring syntax within your map statement:

array.map(([ a, b ]) => [ a*2, b*2 ]);

Comments

3
const deepMap=(input,callback)=>input.map(entry=>entry.map?deepMap(entry,callback):callback(entry))

//test 

deepMap([1,2,3,[1,2]],x=>x*2) // [1,4,9,[1,4]]

Comments

3

The simple way to do that at ES5:

[].concat(...this.array1.map(ap => ap.subArray))

1 Comment

I'm failing to see how this answers the question.
-1

It can be a kind of entangle:

var Coef = Array.apply(null, Array(3)).map(function(){return
Array.apply(null, Array(4)).map(function(){return 0})})

Nevertheless, it can be useful if you want to initialize an array in Gas

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.