在JavaScript中使用forEach将数组的所有元素乘以数字

时间:2015-03-17 22:35:15

标签: javascript arrays foreach

我有一系列数字:

var array = [ 23, 67, 120, 170, 200, 212, 350 ];

我希望将每个元素的元素缩小20%。

我使用了array.forEach(function(item) {item * 0.8;});,但它没有做任何事情。我也尝试了var scaledArray = array.forEach(function(item) {item * 0.8;});,但结果未定义。

4 个答案:

答案 0 :(得分:6)

forEach针对数组中的每个元素调用提供的函数;它不会返回带有修改值的新数组(来自对每个元素调用提供的函数)。您要使用的是map

array = array.map(function(element) {
    return element * 0.8;
});

这将根据您提供的映射函数映射数组的每个元素,并返回由这些映射值组成的新数组。

如果你想保留原始数组,你可以简单地将map的结果分配给另一个变量:

var scaledArray = array.map(function(element) {
    return element * 0.8;
});

可以使用forEach执行这两项操作,如:

array.forEach(function(element, index, _array) {
    _array[index] = element * 0.8;
});

var scaledArray = [];
array.forEach(function(element, index) {
    scaledArray[index] = element * 0.8;
});

但我相信你会同意map版本更加优雅和惯用。

答案 1 :(得分:1)

使用map代替forEach

var arr = array.map(function(item) {return item * 0.8;})

map方法创建一个新数组,其中包含调用a的结果 }在此数组中的每个元素上提供了函数,forEach不会创建新数组。

答案 2 :(得分:0)

以下是使用forEach

的方法

var array = [ 23, 67, 120, 170, 200, 212, 350 ]

array.forEach(function(val, idx) {
  array[idx]= val * 0.8;
});

alert(array.join('\r'));

Array.prototype.map()通常是更直接的解决方案,但实际上它可能比Array.prototype.forEach()更慢,因为forEach可以就地修改数组:

http://jsperf.com/foreach-v-map

答案 3 :(得分:0)

您可以直接使用map ,但要使用forEach ,请注意:

  • .forEach(function() { <code> })等同于(...) { <code> }.

您正在将数字相乘,但对这些数字不做任何操作。您可以更改正在使用的实际数组,但应将该操作分配给该数组。 (我还添加了.toFixed(2),将结果四舍五入到小数点后两位。由于结果是string,因此将Number()添加到了整个结果中。

let array = [ 23, 67, 120, 170, 200, 212, 350 ];
array.forEach ( function(x,i) {
array[i] = (x * .8).toFixed(2);
console.log(array); 
});