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

后端 未结 9 1403
暖寄归人
暖寄归人 2021-02-06 22:55

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]
相关标签:
9条回答
  • 2021-02-06 23:27
    for(var i=0; i<a.length; i++) {
        a[i] *= 5;
    }
    
    0 讨论(0)
  • 2021-02-06 23:29

    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].

    0 讨论(0)
  • 2021-02-06 23:29
    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;
    }
    
    0 讨论(0)
  • 2021-02-06 23:29

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

    _.map( a, function multiply(x){ return x*5; } );
    
    0 讨论(0)
  • 2021-02-06 23:31

    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:

    • Array.prototype.forEach()
    • Arrow functions

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

    0 讨论(0)
  • 2021-02-06 23:32

    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);
    
    0 讨论(0)
提交回复
热议问题