2017-01-06 33 views
-5

我有此數組編號的JS代碼:如何將每個數字與之前的數字(JavaScript)相加?

var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; 

我需要總結與之前的數字的每個號碼。

var cumulative12ArrOfNumbers = [10, 30, 60, 100, 150, 210, etc to 11 index... ]; 

什麼是在JS中做到這一點的最佳方法?

UPD:我是新手,在JS

+0

代碼你想要什麼?我想要你的解決方案。我只有這些陣列 –

+0

不,這不是如此工作。你需要提出一個具體的問題,並嘗試解決方案。然後我們解決你的代碼。你只是想讓我們爲你寫代碼。那不會飛。 – dda

+0

如果你想知道,降價是因爲你不顯示研究努力 – Randy

回答

3

這將在不改變原始數組的情況下完成工作。你只需要將你的原始數組傳遞給函數。

var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; 
 
var myFunc = function(arrOf12Numbers) { 
 
    var cumulative12ArrOfNumbers = []; 
 
    cumulative12ArrOfNumbers[0] = arrOf12Numbers[0]; 
 
    for(i=1; i<arrOf12Numbers.length; i++) { 
 
    cumulative12ArrOfNumbers[i] = arrOf12Numbers[i-1] + arrOf12Numbers[i]; 
 
    } 
 
    console.log(cumulative12ArrOfNumbers); 
 
}; 
 
myFunc(arrOf12Numbers);

11

你可以使用Array#map並返回項之和的最後一筆。這個建議不會改變原始數組。

var array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], 
 
    result = array.map(function (a) { 
 
     return this.last += a; 
 
    }, { last: 0 }); 
 

 
console.log(result);

而不thisArg A版和封蓋

var array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], 
 
    result = array.map(function (last) { 
 
     return function (a) { 
 
      return last += a; 
 
     }; 
 
    }(0)); 
 

 
console.log(result);

ES6

var array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], 
 
    result = array.map((last => a => last += a)(0)); 
 

 
console.log(result);

2

這可以幫助你。

var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; 
 

 
var result = []; 
 

 
var sum = 0; 
 

 
arrOf12Numbers.forEach(function (val, key) { 
 
    sum += val; 
 
    result.push(sum); 
 
}); 
 

 
console.log(result);

+0

不必要的使用JQuery – musefan

+0

@musefan爲你說服,我已經改變了方法。請檢查。 – Shubham

+1

好的答案,plusone爲了可讀性。注意你不需要關鍵參數,JS不需要所有的參數。 – Randy

0

這不是真的那麼複雜,只是一個循環;使用常規for循環

var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; 
 
var output = [], sum; 
 

 
for (var i = 0; i < arrOf12Numbers.length;i++) 
 
{  
 
    output.push(i === 0 ? arrOf12Numbers[i] : output[i-1] + arrOf12Numbers[i]) 
 
} 
 

 
console.log(output);

+0

除非絕對需要,否則不要使用嵌套循環 – musefan

4

簡單而快速的解決方案(沒有任何功能):

var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; 
 
for (var i = 0, len = arrOf12Numbers.length; i < len; i++) { 
 
    if (i > 0) arrOf12Numbers[i] = arrOf12Numbers[i] + arrOf12Numbers[i - 1]; 
 
} 
 
console.log(arrOf12Numbers);

而且它2倍以上快比方法無線TH map()功能(如果你關心性能)


爲了得到結果作爲新的數組用下面的辦法:

var arrOf12Numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], 
 
    result = arrOf12Numbers.slice(); 
 

 
for (var i = 0, len = result.length; i < len; i++) { 
 
    if (i > 0) result[i] = result[i] + result[i - 1]; 
 
} 
 
console.log(result);

第二apprroach仍是約2時間快於map()函數法

1
var arr = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]; 
for (var i = 1; i < arr.length; i++) { 
    sum = arr[i] + arr[i-1]; 
    arr[i] = sum; 
} 
+2

您知道,您可以在第一個語句之後直接放置'for',並且行數更少! – musefan

相關問題