我有一个如下的嵌套数组
var x=[1,2,[3,4,[5,6,[7,8,[9,10]]]]]
我想对数组中的每个元素进行乘法与 2 的运算,结果将如下所示
[2,4,[6,8,[10,12,[14,16,[18,20]]]]]
到目前为止,我已经完成了以下工作
function nestedArrayOperation(arr){
var p=[];
arr.forEach(function(item,index){
if(Array.isArray(item)){
p.push(nestedArrayOperation(item))
return
}
p.push(item*2);//multiply by 2
return
});
return p;
}
function nestedArrayOperation(arr){
var p=[];
arr.forEach(function(item,index){
if(Array.isArray(item)){
p.push(nestedArrayOperation(item))
return
}
p.push(item*2);//Multiply by 2
return
});
return p;
}
var x=[1,2,[3,4,[5,6,[7,8,[9,10]]]]]
console.log(nestedArrayOperation(x))
.as-console-row-code{white-space: nowrap!important;}
在这里,我正在硬编码的函数内执行操作,我想制作通用nestedArrayOperation ,其中操作将由用户确定,例如 map,reduce 等功能。作品。
就像map
函数一样,我们可以执行任何操作
[1,2,3,4] .map(x => x ** 2)//它将返回[1,4,9,16]
要么
[1,2,3,4] .map(x => x * 2)//它将返回[2,4,6,8]
示例如下:
arr.nestedArrayOperation(x=>x*2)
//or
arr.nestedArrayOperation(x=>x+5)
请帮助创建该通用
谢谢
答案 0 :(得分:3)
您可以进行回调,以检查该值并映射数组或乘数值。
此提案使用Array#map
并返回一个新数组。
var times2 = v => Array.isArray(v) ? v.map(times2) : 2 * v,
x = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]],
x2 = x.map(times2);
console.log(x2);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:3)
您正在寻找
function nestedArrayOperation(arr, callback) {
return arr.map(function(item,index) {
if (Array.isArray(item))
return nestedArrayOperation(item, callback);
else
return callback(item, index);
});
}
var example = [1,2,[3,4,[5,6,[7,8,[9,10]]]]];
console.log(nestedArrayOperation(example, x=>x*2));
答案 2 :(得分:1)
ternary operator
中使用Array#map
Array.prototype.nestedArrayOperation = function(callback) {
return this.map((item, index) => Array.isArray(item) ? item.nestedArrayOperation(callback): callback(item));
}
var x = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]]
console.log(x.nestedArrayOperation((x) => x + 2))
console.log(x.nestedArrayOperation((x) => x * 2))
.as-console-row-code {
white-space: nowrap!important;
}