首页 > 解决方案 > 通过删除字符串来计算数组的总和?

问题描述

我有一个数组,每个学生有 3 个索引:

var students = [
    ['Toto', 4, 17],
    ['Titi', 11, 12],
    ['Tata', 12, 14]
];

我必须计算每个学生的总和。除此之外,我必须避免使用字符串。

我为学生获得的结果Toto不是0.21

不明白问题出在哪里?

var students = [
  ['Toto', 4, 17],
  ['Titi', 11, 12],
  ['Tata', 12, 14]
];

var result = 0;

for (var i = 0; i < students.length; i++) {
  if (typeof(students[i]) === "number") {
    result += students[i];
  }
  console.log("Student " + students[i][0] + " has the result " + result);
}

标签: javascript

解决方案


您可以在这里简单地使用解构Array.prototype.reduce

const students = [['Toto', 4, 17], ['Titi', 11, 12], ['Tata', 12, 14]];

for (const student of students) {
  const [ name, ...summands ] = student;
  console.log(`${name} scored ${summands.reduce((acc,val)=>acc+val,0)}`)
}

对于更简洁的版本,您可以直接在 for-definition 中解构:

const students = [['Toto', 4, 17], ['Titi', 11, 12], ['Tata', 12, 14]];

for (const [ name, ...summands ] of students) {
  console.log(`${name} scored ${summands.reduce((acc,val)=>acc+val,0)}`)
}

这也适用于长度不同的总和列表:

const students = [['Toto'], ['Titi', 1,2,3,4,5,6], ['Tata', 12, 14]];

for (const [ name, ...summands ] of students) {
  console.log(`${name} scored ${summands.reduce((acc,val)=>acc+val,0)}`)
}


推荐阅读