我有一个三维数组,例如:
var array = [[1,0][3,3][2,1][0,8]]
我想对每个子数组中的第一项做一些事情,但是对每个子数组中的第二项做其他事情。

因此,例如,我想找到array[0][0], array[1][0], array[2][0]的总和,等等。但是,我想要array.length等单独的结果。

我仍在学习javascript(非常慢),如果可能的话,我想指出正确的方向,而不是寻求现成的解决方案。我一直在寻找可能的解决方案,并且我想可能需要一个嵌套的array[0][1], array[1][1], array[2][1]循环,但是我不确定如何构造它以获取所有值。

我一直在尝试以下方法:

for (var i = 0; i < array.length; i++) {
  for (var j = 0; j < array.length; j++) {
    return array[i][j];
  }
}

但是我不明白发生了什么事以至于无法操纵结果。

如果有人可以引导我朝正确的方向寻求解决方案,那将不胜感激。

提前致谢。

最佳答案

您可能会考虑使用.reduce-在每次迭代中,将第一个数组值添加到累加器的属性中,然后对第二个数组值执行所需的操作,将其结果分配给累加器的另一个属性。例如,对于第二个项目,您想获得其产品:

const input = [[1,0],[3,3],[2,1],[0,8]];
const { sum, product } = input
  .reduce(({ sum=0, product=1 }, [item0, item1]) => ({
    sum: sum + item0,
    product: product * item1
  }), {});
console.log(sum, product);


在上面的代码中,累加器是一个具有两个属性的对象,sum(从0开始)和product(从1开始)。在reduce内部,将返回一个对象,新的sum是旧的sum加上数组中的第一项,新的product是旧的product乘以数组中的第二项。 (当然,结果乘积为0,因为在第一个子数组中,第二项为0)

还要注意,数组始终需要用逗号分隔每个数组项-您需要修复输入数组的语法。

当然,您也可以根据需要循环for循环,但是我认为数组方法是更可取的,因为它们功能更多,抽象性更好并且不需要手动迭代。带有for循环的相同代码如下所示:

const input = [[1,0],[3,3],[2,1],[0,8]];
let sum = 0;
let product = 1;
for (let i = 0; i < input.length; i++) {
  const [item0, item1] = input[i];
  sum += item0;
  product *= item1;
}
console.log(sum, product);

09-25 17:20
查看更多