问题描述
我想对数组各个级别的每个值应用一个函数:
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 }
})
};
但是当我运行它时,我只是不确定,所以我必须做一些不太正确的事情?
有任何想法吗??
谢谢
1楼
一切正常,但是您忘了从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)));
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));