我如何获得这个 javascript 问题的答案?

问题描述 投票:0回答:1

function multiplyAll(arr) {
  var product = 1;

  for ( var i = 0; i< arr.lenght; i++) {
    for (var j=0; j < arr[i].lenght; j++) {
      product *= arr[i][j];
    }
  }

  return product;
}

var product = multiplyAll([[1,2], [3,4],[5,6,7]]);
console.log(product);

我预计会得到

5000+
作为答案

javascript arrays iteration
1个回答
0
投票

您的两个

for
循环都有一个拼写错误:该属性称为
length
,而不是
lenght
。在 JavaScript 中,访问不存在的属性的结果是
undefined
。如果
0 < undefined
是数字,则
false
的计算结果为
x
,因此外部和内部
for
循环不会运行,您将得到
1
。修复拼写错误,它会按预期工作(我还建议使用
let
const
而不是
var
):

function multiplyAll(arr) {
  let product = 1;

  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr[i].length; j++) {
      product *= arr[i][j];
    }
  }

  return product;
}

const product = multiplyAll([[1,2], [3,4],[5,6,7]]);
console.log(product);

可以通过使用

for
-
of
循环来避免此类错误:

function multiplyAll(arr) {
  let product = 1;
  for (const subarr of arr)
    for (const num of subarr)
      product *= num;
  return product;
}
const product = multiplyAll([[1,2], [3,4],[5,6,7]]);
console.log(product);

或者甚至更好,使用

reduce
:

const multiplyAll = (arr) => arr.reduce((prod, subarr) => prod * subarr.reduce((prod, num) => prod * num, 1), 1);
const product = multiplyAll([[1,2], [3,4],[5,6,7]]);
console.log(product);

还有

flat

const multiplyAll = (arr) => arr.flat().reduce((prod, num) => prod * num, 1);
const product = multiplyAll([[1,2], [3,4],[5,6,7]]);
console.log(product);

© www.soinside.com 2019 - 2024. All rights reserved.