以下是我的数据结构;
{
"questions": ["Large choice of food", "Food quality", "Food freshness"],
"countries": ["Netherlands", "Belgium", "France"],
"values": [
[
[5, 88, 18],
[50, 83, 10],
[29, 78, 80]
],
[
[46, 51, 61],
[95, 21, 15],
[49, 86, 43]
],
[
[7, 46, 92],
[54, 94, 31],
[89, 96, 11]
]
]
}
这是我的排序脚本;
function calculateTotals() {
var countryS = "France"
var country = data.countries.indexOf(countryS);
var values
for (var question= 0; question < data.questions.length; question++) {
// get the values for the question/country
values = data.values[question][country];
console.log(values)
目前,这会将此输出到控制台;
因此,目前此脚本正在记录按国家/地区索引的每个问题的值。
我想将这个数组中的每个项目加在一起。所以,从这个输出中我想做以下补充;
29 + 49 + 89,
78 + 86 + 96,
80 + 43 + 11
我不知道怎么能这样做?
我认为也许使用.pop()/。shift()3次可能会有效,或者只使用[0],[1],[2]。但是,在返回数组中的单个项目之后,我不确定如何将3个数组数字加在一起?
希望一切都清楚,任何帮助/建议都非常感谢!
答案 0 :(得分:2)
您也可以使用数组对项目进行求和迭代。
此提案基本上使用Array#forEach
。
forEach()
方法为每个数组元素执行一次提供的函数。
function calculateTotals() {
var countryS = "France",
country = data.countries.indexOf(countryS),
sum = [];
data.values.forEach(function (question) {
question[country].forEach(function (a, i) {
sum[i] = (sum[i] || 0) + a;
});
});
console.log(sum);
}
var data = { "questions": ["Large choice of food", "Food quality", "Food freshness"], "countries": ["Netherlands", "Belgium", "France"], "values": [[[5, 88, 18], [50, 83, 10], [29, 78, 80]], [[46, 51, 61], [95, 21, 15], [49, 86, 43]], [[7, 46, 92], [54, 94, 31], [89, 96, 11]]] };
calculateTotals();
&#13;
答案 1 :(得分:0)
您可以使用数组map函数迭代它们并执行此类操作。
E.g。
var arr = [[29,49,89], [78,86,96], [80,43,11]];
var final = arr.map(function(v){
var res = 0;
v.forEach(function(e){
res += e;
});
return res;
});
console.log(final); //[167, 260, 134]
为了更简单,但不推荐,你也可以通过这样做来实现它,
var arr = [[29,49,89], [78,86,96], [80,43,11]];
var final = arr.map(function(v){
return eval(v.join('+'));
});
console.log(final); //[167, 260, 134]
答案 2 :(得分:0)
尝试更新的plunkr
这是更新的方法
function calculateTotals()
{
var countryS = "France"
var country = data.countries.indexOf(countryS);
var sum = [0,0,0];
for (var question= 0; question < data.questions.length; question++)
{
var values = data.values[question][country];
for( var counter = 0; counter < values.length; counter++ )
{
sum[counter] += values[counter];
}
}
document.body.innerHTML += sum;
}
<强>样本强>
var data = {
"questions": ["Large choice of food", "Food quality", "Food freshness"],
"countries": ["Netherlands", "Belgium", "France"],
"values": [
[
[5, 88, 18],
[50, 83, 10],
[29, 78, 80]
],
[
[46, 51, 61],
[95, 21, 15],
[49, 86, 43]
],
[
[7, 46, 92],
[54, 94, 31],
[89, 96, 11]
]
]
}
function calculateTotals() {
var countryS = "France"
var country = data.countries.indexOf(countryS);
var sum = [0, 0, 0];
for (var question = 0; question < data.questions.length; question++) {
var values = data.values[question][country];
for (var counter = 0; counter < values.length; counter++) {
sum[counter] += values[counter];
}
}
document.body.innerHTML += sum;
}
calculateTotals();
&#13;
答案 3 :(得分:0)
使用嵌套循环的纯JavaScript尝试以下内容:: (如果你想获得所有的补充)
var arr = [[29,49,89], [78,86,96], [80,43,11]];
var resultArr;
for(var i = 0, len = arr.length; i < len; i++) {
for(var j = 0, len2 = arr.length; j < len2; j++) {
resultArr+= arr[j][i];
}
}
如果您只想一次获得一笔款项:
var result;
for(var i = 0, len = arr.length; i < len; i++) {
result+= arr[j]["YourIndex"];
}
答案 4 :(得分:0)
您可以使用array.reduce来实现所需的输出。
for (var question= 0; question < data.questions.length; question++) {
// get the values for the organization/country
values = data.values[question][country];
console.log(values);
var sumOfValues = values.reduce(
function(previousVal, currentVal) {
return previousVal + currentVal;
}, 0);
console.log("Sum of values");
console.log(sumOfValues);
}
这里的傻瓜 https://plnkr.co//TckVhx52VcMGgb0eZjzW?p=preview
编辑: array.reduce是最快的方法之一。可以找到许多链接信息。 我在这里有一个。看到答案。 How to find the sum of an array of numbers