用 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
可以就地修改数组:
您可以直接使用 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);
});
我有一个数字数组:
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
可以就地修改数组:
您可以直接使用 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);
});