簡體   English   中英

如何將數組的每個成員乘以javascript中的標量?

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

例如,如何在不迭代數組的情況下實現以下目標?

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

從 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()只是讓你這樣做不那么明顯。

在 ECMAScript 6 中,您可以使用箭頭函數

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

console.log(b);   // [5, 10, 15]

箭頭函數是具有詞法this綁定的內聯函數的語法糖

// ES6
let array2 = array1.map(x => x * 5);
// ES5
var array2 = array1.map((function (x) { return x * 5; }).bind(this));

因此,如果您需要支持Internet Explorer 或其他舊瀏覽器(Edge 理解 ES6),您可以在項目中使用babeljsTypeScript將您的代碼交叉編譯為 ES5 語法。

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

Ecmascript 2016 (ES7) 定義了 SIMD 數學,它允許像您想要的那樣更快、更輕松地進行乘法運算。 然而,到今天為止,幾乎沒有瀏覽器支持 SIMD(只有 Firefox nightly build 支持)[ 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 之前,您必須求助於使用 map

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

所有現代瀏覽器[ 3 ]都很好地支持它。

文檔中所述:

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

您可以使用 .map 但您還必須創建一個新變量以將新值放入:

var a = [1,2,3];

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

alert(b);
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;
}

你可以試試這個:

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

用法

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

使用 Lodash 的 map 函數,這將返回原始數組a乘以常量5

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

我認為沒有迭代是不可能的。

通過迭代,以下是方法:

let a=[1,2,3,4] 

然后,

方法一:

a=a.map(e=>{return e*5})

方法二:

a.forEach((e,i)=>a[i]=5*e)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM