用 forEach in JavaScript 将数组的所有元素乘以数字

Multiply by number all ellements of an array with forEach in JavaScript

我有一个数字数组:

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;});,但结果是不确定的。

使用map代替forEach:

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

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

forEach invokes the provided function against each element in the array; it does not return a new array with modified values (that come from calling the provided function against each element). What you want to use is map:

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

这将根据您提供的映射函数映射数组的每个元素,并且 return 一个包含这些映射值的新数组。

如果您想保留原始数组,只需将 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 版本更加优雅和地道。

使用 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() is generally the more straight-forward solution, but it may actually be slower than Array.prototype.forEach() 这样的事情,因为 forEach 可以就地修改数组:

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

您可以直接使用 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); 
});