gpt4 book ai didi

javascript - 如何将一个数组中的值与另一个数组中的值成对相加?

转载 作者:行者123 更新时间:2023-12-02 17:00:45 25 4
gpt4 key购买 nike

如何将一个数组的等于索引值添加到另一个数组?

我知道我可以做这样的事情:

var i = 0,
a = [1, 2, 3],
b = [4, 5, 6],
total = [];

while (i < a.length) {
total[i] = a[i] + b[i];
i = i + 1;
}

console.log(total); //[5, 7, 9]

但是有没有标准或更快的方法来做到这一点?

(在我的具体情况下,在所有情况下a.length === b.length)。

最佳答案

您可能会发现这更紧凑:

a.map(function(v, i) { return v + b[i]; })

在 ES6 中它会更加紧凑:

a.map((v, i) => v + b[i])

我们可以编写自己的 map 版本,它并行循环两个数组:

function mapTwo(arr1, arr2, fn, ctxt) {
return arr1.map(function(v, i) {
return fn.call(ctxt, v, arr2[i], i);
};
}

现在我们可以解决原来的问题了

mapTwo(a, b, function(v1, v2) { return v1 + v2; }))

或者,如果我们真的想要的话,让我们编写一个迭代许多数组的map。它将使用一组值调用回调,每个值来自每个输入数组。

function mapMany(arrays, fn, ctxt) {
fn = fn.bind(ctxt);
return arrays[0].map(function(_, i) {
return fn(arrays.map(function(array) { return array[i]; }), i);
};
}

现在我们可以做

mapMany([a,b], sum);

其中总和

function sum(values) {
return values.reduce(function(result, val) { return result+val; });
}

我们还可以编写一个更通用的函数,称为zip,它将输入数组中每个索引处的元素组合到一个数组中,从而返回一个数组数组。我们现在将处理数组长度不同的情况;

function zip(arrays) {
var result = [],
max = Math.max.apply(0, arrays.map(function(array) { return array.length; }));
for (var i=0; i<max; i++) {
result.push(arrays.map(function(array) { return array[i]; });
}
return result;
}

现在我们可以使用以下命令创建两两求和

zip([a,b]).map(sum)

关于javascript - 如何将一个数组中的值与另一个数组中的值成对相加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25745938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com