我需要对2个数组进行逐元素求和。除了使用嵌套循环外,还有其他更有效的方法吗?
我正在使用JavaScript ES6。
我曾考虑过使用map,但是map总是会返回与其调用的数组长度相同的数组。
我也考虑使用一个对象来存储总和,但是如果没有在某个时候嵌套2个for循环,我将无法做到这一点。
const arr1 = [1, 2];
const arr2 = [0, 3, 5];
const sum = [];
for (let x of arr1) {
for (let y of arr2) {
sum.push(x + y);
}
}
// Expected output: [ 1, 4, 6, 2, 5, 7 ]
预期的解决方案应优于O(n ^ 2)。
答案 0 :(得分:0)
我想您可以创建一个列表列表,每个内部列表都是通过将您的一个输入列表映射到一个加法表以及另一个列表中一个元素的结果。
const sums = [];
for (let x of arr1) {
sums.push(arr2.map(function (y) { return y + x }))
}
然后您将得到一个包含充满结果的 n 个数组的数组。使用sums[i][j]
访问它们。
这不会降低复杂性(仍然是 O ( n × m ),我敢肯定这是不可避免),但是它将某些计算从JS代码移到map
实现中,这可能会更有效(在浏览器的JS实现中进行了优化等)。
如果arr1
小于arr2
,这将更加有效,因此您可以在应用此想法之前考虑将其交换。