我有一个数字数组:
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;});
,但结果是undefined。
我有一个数字数组:
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;});
,但结果是undefined。
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
版本更加优雅和惯用。
map
替换 forEach
:var arr = array.map(function(item) {return item * 0.8;})
map 方法会对数组中的每个元素调用一个提供的函数,并返回一个新的数组,而 forEach
不会创建新的数组。
array.map(item => item * 0.8)
会更好。 - harukaeruforEach
的方法来实现它:
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
可以在原地修改数组:
你可以使用map
,这是直接的方法,但如果你想使用forEach
,请注意:
.forEach(function() { <code> })
等同于(...) { <code> }.
。你正在对数字进行乘法运算,但没有对这些数字做任何事情。你可以改变你正在操作的实际数组,但应该将该操作分配给数组。(我还添加了.toFixed(2)
以将结果四舍五入到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);
});
.forEach(function() { <code> })
基本上等同于for(...) { <code> }
。你正在将两个数字相乘,但你没有对结果做任何事情。它不会自动为你执行任何操作。 - Felix Klingmap
现在是原生JavaScript中一个相当普遍的函数,无需使用库。链接页面还提供了一个用于不支持它的浏览器的polyfill。 - James Thorpe