2016-11-16 55 views
-1

我想獲取數組的元素,將它們乘以它們的索引位置,並將結果添加到一起。通過索引位置乘以數組元素

所以,如果我有:

array = [1, 2, 3] 

我會得到8

// (1 * 0)+(2 * 1)+(3 * 2) = 8 

什麼是做到這一點的香草JS,只是爲了學習目的的最佳方式是什麼?

+5

出於學習目的,您應該嘗試自己做。從for循環開始。 – Blorgbeard

+0

'var t = 0,i = array.length; while(i--)t + = i * array [i];' –

+0

'[1,2,3] .reduce((s,n,i)=> s +(n * i),0);' – Yoshi

回答

2

的功能,語義的方法是:

const add  = (a, b) => a + b; 
const multiply = (a, b) => a * b; 

綜上所述陣列:

const sum  = a => a.reduce(add, 0); 

加起來的價值和指數產品,只要你想:

const weightedSum = a => sum(a.map(multiply)); 

我們能夠說a.map(multiply)因爲map發生的價值和指數傳遞給回調multiply

當然,這可能比您想要的還要多或需要學習。正如其他人所說的那樣,老式循環沒有任何問題:

function weightedSum(a) { 
    sum = 0; 
    for (let i = 0; i < a.length; i++) sum += a[i] * i; 
    return sum; 
} 
+0

非常感謝您的解釋!這對我來說意味着這麼多。 –

1
var array = [1, 2, 3]; 
var items = array.map(function(x,i){ 
    return x * i; 
}); 
var sum = items.reduce(function(init, x) { 
    return x + init,0 
});// 8 
1

您可以使用地圖的指數相乘,然後使用減少獲得的總和

var array = [1, 2, 3] 
 
var result = array.map((x,i) => x*i).reduce((a,b) => a+b,0); 
 
console.log(result);

+0

好的,這比我所做的要好得多。有時間瞭解如何使用地圖! –

0
var result = 0; 
for(i=0;i<array.length;i++) 
{ 
    var val = array[i]; 
    result += val*i; 
} 
alert(result); 
+0

這個解決方案沒有什麼特別的錯誤,但是你不想聲明'i',以及將值存儲在'val'中的目的是什麼? – 2016-11-16 20:35:38

1

幾種方法,但最簡單的讓你瞭解是:

var numbers = [1,2,3]; 
var sum = 0; 
for(var i = 0;i < numbers.length; i++){ 
    sum+= (i*numbers[i]); 
} 
console.log(sum); 
+0

注意:另外,也許應該傳遞數字。由於更好的性能,但是這僅僅是一個例子 – niklaz

+0

爲了更好的性能,循環中的緩存長度是一個老婆婆的故事 - 引擎會爲你優化這個。 – 2016-11-16 20:33:01

+0

是的,但是這是推薦,所以習慣於緩存一些輸出的方法,其中有很多代碼:)。 我經常在「for」循環中看到很多方法,其中有很多進程,這是craaazy :)) – niklaz

2

一個非常簡單的方法是:

console.log(
 
       // ┌ the running total 
 
       // │ ┌ the current array value 
 
       // │ │ ┌ the current array index 
 
       // │ │ │ 
 
    [1, 2, 3].reduce((s, n, i) => s + (n * i), 0) 
 
);

手冊:Array.prototype.reduce()

+0

非常感謝! –