如何在javascript中将数组的每个成员乘以标量?

时间:2011-12-10 06:52:51

标签: javascript arrays

例如,如何在不迭代数组的情况下实现以下

var a = [1, 2, 3] * 5;  // a should equal [5, 10, 15]

9 个答案:

答案 0 :(得分:32)

从IE9开始,IE用户可以使用

Array.map(),所以如果您根本不关心兼容性,可以使用:

var a = [1, 2, 3].map(function(x) { return x * 5; });

对于JavaScript 1.8,这可以尽可能短:

var a = [1, 2, 3].map(function(x) x * 5);

如果您需要最大的浏览器兼容性,则必须忍受循环。

无论哪种方式,你都会迭代数组; Array.map()只是让你不那么明显。

答案 1 :(得分:14)

for(var i=0; i<a.length; i++) {
    a[i] *= 5;
}

答案 2 :(得分:11)

快进到2016年,当ECMAScript 6的支持越来越好时:

如果您在项目中使用babeljsTypeScript将代码交叉编译为ES5或don't need to support old browsers and Internet Explorer(Edge支持),则可以使用ES6 arrow functions

number5

对于具有词法var a = [1, 2, 3]; var b = a.map(x => x * 5); // ^^^^^^^^^^ console.log(b); // [5, 10, 15] 绑定的内联函数,箭头函数是语法糖

this

// ES6
array2 = array.map(x => x * 5);

答案 3 :(得分:4)

Ecmascript 2016(ES7)定义了SIMD数学,它允许像你想要的那样快速和简单地进行乘法运算。但是,截至目前,浏览器对SIMD的支持很少(只有Firefox夜间版本支持此功能)[1],[2]。这是它的样子:

var a = SIMD.Float32x4(1, 2, 3);
var b = SIMD.Float32x4(5, 5, 5);
SIMD.Float32x4.mul(a, b);  // Float32x4[5, 10, 15]

在对SIMD提供广泛支持之前,您必须使用地图

var a = [1, 2, 3].map(function(x) { return x * 5; });
所有现代浏览器[3]都很好地支持

答案 4 :(得分:2)

您可以使用.map,但您还必须创建一个新变量以将新值抛出:

var a = [1,2,3];

var b = a.map(function(x){
    return x * 5;
});

alert(b);

答案 5 :(得分:1)

var a, i, ii, term;

a = [1,2,3];
term = 5;

for (i=0, ii=a.length; i<ii; i++) {
  a[i] = a[i] * term;
}

答案 6 :(得分:1)

你可以试试这个:

function scalarMultiply(arr, multiplier) {
   for (var i = 0; i < arr.length; i++)
   {
      arr[i] *= multiplier;
   }
   return arr;
}

<强> USAGE

var a = scalarMultiply([1, 2, 3], 5);

答案 7 :(得分:0)

Docs中所述:

  

map()方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。

在我看来,如果有人想根据当前数组的输入值创建一个新数组,.map()会更合适。

但是,如果有人想要修改数组,.forEach()似乎是更好的选择。

在ES6中,我们可以使用:

以下代码将修改给定的数组arr(不创建新数组):

arr.forEach((value, index) => {arr[index] *= 5});

<强>演示:

var arr = [1, 2, 3];
var scalar = 5;

arr.forEach((value, index) => {
    arr[index] *= scalar;
});
console.log(arr);

答案 8 :(得分:0)

使用Lodash的map函数,返回原始数组a,乘以常数5:

_.map( a, function multiply(x){ return x*5; } );