将每个动态创建的数组中的第一项添加到一起

时间:2016-06-19 08:57:35

标签: javascript arrays

以下是我的数据结构;

{
    "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)

目前,这会将此输出到控制台;

enter image description here

因此,目前此脚本正在记录按国家/地区索引的每个问题的值。

我想将这个数组中的每个项目加在一起。所以,从这个输出中我想做以下补充;

  

29 + 49 + 89,

     

78 + 86 + 96,

     

80 + 43 + 11

我不知道怎么能这样做?

我认为也许使用.pop()/。shift()3次可能会有效,或者只使用[0],[1],[2]。但是,在返回数组中的单个项目之后,我不确定如何将3个数组数字加在一起?

希望一切都清楚,任何帮助/建议都非常感谢!

Plunk Here

5 个答案:

答案 0 :(得分:2)

您也可以使用数组对项目进行求和迭代。

此提案基本上使用Array#forEach

  

forEach() 方法为每个数组元素执行一次提供的函数。

&#13;
&#13;
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;
&#13;
&#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;
  }

<强>样本

&#13;
&#13;
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;
&#13;
&#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