为我的开发课程完成家庭作业。 我的部分问题要求我创建一个多维数组(2D)并从每个嵌套数组中获取第二个元素的总和。我怎样才能实现这一目标?这是我的阵列:
var studentGrades = [['Bob', 85], ['Jim', 76], ['Steve', 92], ['Sue', 83], ['Liz', 65], ['Jack', 77], ['Jo', 96], ['Tim', 80], ['Mike', 53], ['John', 81]];
我需要将所有数字加在一起。 我意识到他们的索引是[1],但我不知道如何编写代码来将它们加在一起。
答案 0 :(得分:2)
答案 1 :(得分:1)
var sum = 0;
for(var x=0; x<arr.length; x++)
sum += arr[x][1];
你只使用2个索引括号,虽然第二个索引总是为1.这是不安全的,因为多维数组可能是锯齿状的,所以第二维没有固定的大小。
var sum = 0;
for(var x=0; x<arr.length; x++)
if(arr[x].length >= 2)
sum += arr[x][1];
每次迭代添加对内部数组长度的检查是更安全的路径。
答案 2 :(得分:0)
二维数组只是数组的数组。直到你更好地掌握它们我会建议写出一个如何访问它的网格。例如,数组a有3个元素,每个元素包含两个元素的数组(我们称之为b)。索引看起来像这样
a0b0 a0b1
a1b0 a1b1
a2b0 a2b1
在你的情况下它是
[['Bob', 85],
['Jim', 76],
['Steve', 92]]
因此,为了让吉姆成绩,我们可以查看索引表,它将是a1b1,转换为studentGrades [1] [1]。 要迭代双维数组,您需要遍历行,然后是列
for(var row = 0; row < a.length; row++){
var b = a[row];
for(var column = 0; column < b.length; column++){
var accesingByRowAndColumn = a[row][column];
var accesingByColumn = b[column];
}
}
如果您只是在学习,我不会建议将一堆代码拼凑在一起以产生解决方案,从长远来看,您只会伤害自己。了解问题和解决问题的工具。我已经辅导了一些人,如果一个问题需要从一本书中的代码示例中稍作调整,他们就会惊慌失措并且不明白该怎么做
答案 3 :(得分:0)
使用ECMAScript5 Array.prototype.reduce
将数组减少到该总和,
var sum = studentGrades.reduce(function(sum, pair) {
return sum + pair[1];
}, 0);
使用ECMAScript6 arrow functions,
对其进行整理var sum = studentGrades.reduce((sum, pair) => sum + pair[1], 0);
答案 4 :(得分:0)
您可以使用Alasql JavaScript库:
执行此操作var res = alasql('SELECT VALUE SUM([1]) FROM ?',[studentGrades]);
试试这个例子at jsFiddle。