例如,如何在不迭代数组的情况下实现以下 ?
var a = [1, 2, 3] * 5; // a should equal [5, 10, 15]
答案 0 :(得分:32)
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()
只是让你不那么明显。
答案 1 :(得分:14)
for(var i=0; i<a.length; i++) {
a[i] *= 5;
}
答案 2 :(得分:11)
快进到2016年,当ECMAScript 6的支持越来越好时:
如果您在项目中使用babeljs或TypeScript将代码交叉编译为ES5或don't need to support old browsers and Internet Explorer(Edge支持),则可以使用ES6 arrow functions:
number5
对于具有词法var a = [1, 2, 3];
var b = a.map(x => x * 5);
// ^^^^^^^^^^
console.log(b); // [5, 10, 15]
绑定的内联函数,箭头函数是语法糖:
this
// ES6
array2 = array.map(x => x * 5);
答案 3 :(得分:4)
var a = SIMD.Float32x4(1, 2, 3);
var b = SIMD.Float32x4(5, 5, 5);
SIMD.Float32x4.mul(a, b); // Float32x4[5, 10, 15]
在对SIMD提供广泛支持之前,您必须使用地图
var a = [1, 2, 3].map(function(x) { return x * 5; });
所有现代浏览器[3]都很好地支持。
答案 4 :(得分:2)
您可以使用.map,但您还必须创建一个新变量以将新值抛出:
var a = [1,2,3];
var b = a.map(function(x){
return x * 5;
});
alert(b);
答案 5 :(得分: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;
}
答案 6 :(得分:1)
你可以试试这个:
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);
答案 7 :(得分:0)
如Docs中所述:
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);
答案 8 :(得分:0)
使用Lodash的map函数,返回原始数组a,乘以常数5:
_.map( a, function multiply(x){ return x*5; } );