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

ste*_*ang 27 javascript arrays

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

var a = [1, 2, 3] * 5;  // a should equal [5, 10, 15]
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 35

Array.map() 从IE9开始,IE用户可以使用,所以如果您根本不关心兼容性,可以使用:

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

对于JavaScript 1.8,这是最短的:

var a = [1, 2, 3].map(function(x) x * 5);
Run Code Online (Sandbox Code Playgroud)

如果您需要最大的浏览器兼容性,您将不得不忍受一个循环.

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

  • 请注意,JavaScript 1.8的语法是非标准的,除Mozilla之外的任何人都不太可能实现.Harmony可能会包含一些lambda语法,虽然它尚未确定(那些JS 1.8已经不在运行中). (3认同)
  • ES6 - `var a = [1,2,3] .map(x => x*5)` (3认同)

Leo*_*ler 15

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

如果在项目中使用babeljsTypeScript将代码交叉编译为ES5,或者您不需要支持旧浏览器和Internet Explorer(Edge支持),则可以使用ES6箭头函数:

var a = [1, 2, 3];
var b = a.map(x => x * 5); // <-------

console.log(b);   // [5, 10, 15]
Run Code Online (Sandbox Code Playgroud)

箭头函数是具有词法绑定的内联函数的语法糖this:

// ES6
let array2 = array1.map(x => x * 5);
Run Code Online (Sandbox Code Playgroud)

// ES5
var array2 = array1.map((function (x) { return x * 5; }).bind(this));
Run Code Online (Sandbox Code Playgroud)


Bhe*_*ung 13

for(var i=0; i<a.length; i++) {
    a[i] *= 5;
}
Run Code Online (Sandbox Code Playgroud)

  • @stchangg - 为什么这个讨厌?这是编程:) (2认同)
  • @Nupul我猜是因为在使用MATLAB之后我习惯了更多的数组支持.= /虽然似乎其他语言如Python和Ruby也没有开箱即用的这种功能,但它们的迭代语法更简洁.此外,Javascript似乎只有较少的内置功能.我的意思是,有点令人惊讶的是[默认情况下Javascript不附带字符串插值功能](http://stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript ). (2认同)

Ger*_*ncy 5

Ecmascript 2016 (ES7) 定义了 SIMD 数学,它允许更快、更轻松地进行您想要的乘法运算。然而,截至目前,很少有浏览器支持 SIMD(只有 Firefox nightly builds 支持)[ 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]
Run Code Online (Sandbox Code Playgroud)

在 SIMD 得到广泛支持之前,您必须求助于使用映射

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

所有现代浏览器都很好地支持它[ 3 ]。


ben*_*ich 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;
}
Run Code Online (Sandbox Code Playgroud)