我想将一个函数应用于数组所有级别的每个值:
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 }
})
};
但是当我运行它时我只是未定义,所以我必须做一些不太正确的事情?
任何想法??
由于
答案 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;