How do I multiply each member of an array by a scalar in javascript?

匿名 (未验证) 提交于 2019-12-03 02:50:02

问题:

For example, how do I achieve the following without iterating over the array?

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

回答1:

Array.map() is available to IE users as of IE9, so if you don't care about compatibility at all you can use this:

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

For JavaScript 1.8, this is as short as you can go:

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

If you need maximal browser compatibility, you'll have to put up with a loop.

Either way you'll be iterating over the array; Array.map() just makes it less obvious you're doing so.



回答2:

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


回答3:

Fast-forward to 2016, when support for ECMAScript 6 is getting better:

If you use babeljs or TypeScript in your project to cross-compile your code to ES5 or you don't need to support old browsers and Internet Explorer (Edge has support), you can use ES6 arrow functions:

var a = [1, 2, 3];  var b = a.map(x => x * 5); //            ^^^^^^^^^^  console.log(b);   // [5, 10, 15] 

Arrow functions are a syntactic sugar for an inline function with lexical this binding:

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

// ES5 array2 = array.map((function (x) { return x * 5; }).bind(this)); 


回答4:

Ecmascript 2016 (ES7) defines SIMD mathematics which allow to do multiplications like the one you desire faster and easier. However, as of today there is very little browser support for SIMD (only Firefox nightly builds support this) [1], [2]. This is how it will look like:

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

Until there will be widespread support for SIMD you'd have to resort to using map

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

which is nicely supported by all modern browsers [3].



回答5:

You can use .map but you also have to create a new variable to throw the new values in:

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


回答6:

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; } 


回答7:

You can try this:

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); 


回答8:

As stated in Docs:

The map() method creates a new array with the results of calling a provided function on every element in the calling array.

In my opinion, .map() is more suitable if someone wants to create a new array based on input values from the current array.

However, if someone wants to modify the array in place, .forEach() seems a better choice.

In ES6 we may use:

Following code will modify a given array arr in place (without creating a new one):

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

Demo:

var arr = [1, 2, 3]; var scalar = 5;  arr.forEach((value, index) => {     arr[index] *= scalar; }); console.log(arr);


回答9:

Using Lodash's map function, this returns the original array a, multiplied by the constant 5:

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


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!