[英]How do I multiply each member of an array by a variable scalar in 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),您可以在項目中使用babeljs或TypeScript將您的代碼交叉編譯為 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.