javascript迭代并映射多维数组

时间:2015-07-17 13:28:16

标签: javascript arrays

我想将一个函数应用于数组所有级别的每个值:

arr = [[1,2,3],[1,2,3],[[1,2],[1,2]],1,2,3]
例如,将所有值乘以3,并将其映射为与之前相同的格式,以便得到:

arr = [[3,6,9],[3,6,9],[[3,6],[3,6]],3,6,9]

最好的方法是什么?

我尝试使用递归函数:

function mapall(array){
         array.map(function(obj){
                   if (Array.isArray(obj)===true) { return mapall(obj) }
                   else{ return obj*3 }
                   })
            };

但是当我运行它时我只是未定义,所以我必须做一些不太正确的事情?

任何想法??

由于

2 个答案:

答案 0 :(得分:4)

一切正常,但你忘了从array.map回来。这是您的代码的更简洁版本:

var arr = [[1,2,3],[1,2,3],[[1,2],[1,2]],1,2,3];
function mapAll(array){
  return array.map(function(item){
    return Array.isArray(item) ? mapAll(item) : item * 3;
  });
}
alert(JSON.stringify(mapAll(arr)));

答案 1 :(得分:2)

带回调函数的版本,您可以使用所需的数组元素(el * 2或其他内容)



var arr = [[1,2,3],[1,2,3],[[1,2],[1,2]],1,2,3];

function mapAll(array, cb) {
    for (var i = 0, len = array.length; i < len; i++) {
        if (Array.isArray(array[i])) {
            mapAll(array[i], cb);
        } else {        
            array[i] = cb(array[i]);
        }
    }
    
    return array;
};

var res = mapAll(arr, function (el) {
    return el * 3;
});

console.log(JSON.stringify(res));
&#13;
&#13;
&#13;