如何使数组相加?

时间:2018-07-07 12:52:17

标签: javascript arrays math

我要添加一个数组。

假设有[7,1,21,70]

在数组索引为0的情况下,它应该是7。在数组索引为1的情况下,我希望它是7 +1(8)。数组索引2、7 + 1 + 21(29)。数组索引3 7 +1 + 21 + 70(99)。

这是我当前的代码:

var pot = {
  'id': 1,
  'name': ['stalin', 'hitler', 'mao', 'kim jong-il'],
  'amount': [50, 10, 150, 500],
  'percentages': new Array()
}

var random = Math.random()*100;
var random = String(random).split(".")[0];
console.log(random);

function potTotal(amounts) {
  var sum = 0;
  for (var key in amounts) {
    sum += pot['amount'][key];
  }
  return sum;
}

function potPercentage(total, amounts) {
  for (var key in amounts) {
    var percentage = amounts[key] / total * 100;
    var percentage = String(percentage).split(".")[0];
    var percentage = Number(percentage);
    pot['percentages'].push(percentage);
  }
}

potPercentage(potTotal(pot['amount']), pot['amount']);

function ranging(total, percentages) {
  console.log(percentages);
  for(var i = 0; percentages < i; i++) {
    console.log(percentages[i]);
  }
}
//[7, 1, 21, 70]
ranging(random, pot['percentages']);

for (var key in pot['percentages']) {
  console.log(key);
  console.log(pot['percentages'][key]);
}

结果返回:

69
[ 7, 1, 21, 70 ]
0
7
1
1
2
21
3
70

6 个答案:

答案 0 :(得分:1)

ServiceBusAttribute是定义用于执行此类任务的功能。

reduce

答案 1 :(得分:0)

一个简单的forEach()将为您服务:

var arr = [7, 1, 21, 70];
arr.forEach((item, index) => {
  if(index - 1 > -1){
    arr[index] += arr[index-1];
  }
});
console.log(arr);

答案 2 :(得分:0)

只需使用for循环进行迭代并添加上一项

let items = [1,2,3,4,5,6,7];

for (let i = 1; i < items.length; i++)
    items[i] = items[i] + items[i-1];

答案 3 :(得分:0)

基本上,您正在寻找prefix sum方法,请尝试以下操作:

var arr = [7, 1, 21, 70]; 
 for(var i = 1; i < arr.length; i++){
    arr[i] += arr[i-1];
 }
 
 console.log(arr);

供参考:Prefix sum

答案 4 :(得分:0)

我喜欢这个,因为它很容易阅读并且不会改变原始数组。

映射数组使您可以逐一访问该数组中的每个项目(就像foreach循环一样),但它还会创建一个包含回调返回值的新数组。

function addConsecutives(nums) {
   let sum = 0;

   return nums.map(num => sum += num)
}

console.log(addConsecutives([7, 1, 21, 70]));

答案 5 :(得分:0)

您可以在数组上使用reduce方法,以免在进行计算时麻烦管理索引,并且reduce还会为您返回全新的数组 ,还有不破坏原始阵列的额外好处

var originalArray =  [7, 1, 21, 70];

var addUp = (acc, curr, index) => {
  if (index === 0) acc.push(curr);
  else acc.push(acc[index-1] + curr);
  return acc;
}

var computedArray = originalArray.reduce(addUp, []);

console.log(computedArray);