将数组元素按索引位置相乘

Multiply Array Elements by Index Position

本文关键字:位置 索引 数组元素      更新时间:2023-09-26

我想取数组中的元素,将它们乘以它们的索引位置,然后将结果相加。

所以如果我有:

array = [1, 2, 3] 

我会得到8。

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

在普通JS中做这件事的最好方法是什么,仅仅是为了学习的目的?

一个非常简单的方法是:

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

Manual: Array.prototype.reduce()

一个功能的、语义的方法是:

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

当然,这可能比您现在想要或需要学习的更多。老式的for循环没有错,就像其他人提到的:

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

您可以使用map来乘以index,然后使用reduce来获得和

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

有几种方法,但最容易理解的是:

var numbers = [1,2,3]; 
var sum = 0; 
for(var i = 0;i < numbers.length; i++){
    sum+= (i*numbers[i]);
}
console.log(sum);
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
var result = 0;
for(i=0;i<array.length;i++)
{
    var val = array[i];
    result += val*i;
}
alert(result);