用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);
});