用JavaScript中的forEach乘以数组的所有元素

用JavaScript中的forEach乘以数组的所有元素,javascript,arrays,foreach,Javascript,Arrays,Foreach,我有一组数字: var array = [ 23, 67, 120, 170, 200, 212, 350 ]; 我想把数组的每个元素缩小20% 我使用了array.forEach(函数(项){item*0.8;}),但它什么也没做。我还尝试了var scaledaray=array.forEach(函数(项){item*0.8;}),但结果未定义。使用map而不是forEach: var arr = array.map(function(item) {return item * 0.8;})

我有一组数字:

var array = [ 23, 67, 120, 170, 200, 212, 350 ];
我想把数组的每个元素缩小20%


我使用了
array.forEach(函数(项){item*0.8;}),但它什么也没做。我还尝试了
var scaledaray=array.forEach(函数(项){item*0.8;}),但结果未定义。

使用
map
而不是
forEach

var arr = array.map(function(item) {return item * 0.8;})
该方法使用调用 此数组中每个元素上提供的函数,
forEach
不会创建新数组。

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

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

如果要保留原始数组,只需将
map
的结果分配给不同的变量:

var scaledArray = array.map(function(element) {
    return element * 0.8;
});
您可以使用
forEach
执行这两项操作,如:

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


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

以下是如何使用
forEach

var arr = array.map(function(item) {return item * 0.8;})
var数组=[23,67,120,170,200,212,350]
forEach(函数(val,idx){
数组[idx]=val*0.8;
});

警报(array.join('\r'))
您可以使用直接的
映射
,但是如果您想使用
forEach
,请注意:

  • .forEach(function(){
    })
    相当于
    (…){
    }。
您将数字相乘,但不使用这些数字执行任何操作。您可以更改正在处理的实际阵列,但应将该操作分配给该阵列。(我还添加了
.toFixed(2)
,将结果四舍五入到小数点后2位,结果是一个
字符串,因此在整个结果中添加了Number()

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

是否签出了underline.js?可以映射数组元素。
.forEach(function(){
})
基本上等同于(…){
}的
。您将两个数字相乘,但没有对结果做任何事情。它并没有神奇地为您做任何事情。@如答案中所示,dustmouse现在在本机javascript中是一个相当广泛使用的函数,不使用库。链接页面还为本机不支持它的浏览器提供了一个多边形填充。@James Thorpe。一些较旧的浏览器(如IE 8及以下版本)不支持本机数组映射功能。为什么不使用一个文档完整且相对标准的库(如下划线.js),它可以处理浏览器兼容性/实现细节,并提供大量其他功能?@dustmouse polyfill就是这样做的。它填充实现对于缺少它们的浏览器。请注意,作者解释了差异,并不仅提供了解决方案。+1 foreach的第三个参数是数组本身,因此您可以使用它,而不是从外部引用它。我同意这一点,最好使用以下
array.map(item=>item*0.8)
let array = [ 23, 67, 120, 170, 200, 212, 350 ];
array.forEach ( function(x,i) {
array[i] = (x * .8).toFixed(2);
console.log(array); 
});