如何返回一个最大值设置的数组,在这种情况下,它们大于5?用最大值限制迭代数组并返回
arr.forEach(function(index, theArray) {
if (theArray[index] > 5) theArray[index] = 5
})
console.log(arr) // [5.5, 0.1 8.4, 4.3, etc]
想[5, 0.1, 5, 4.3, etc]
如何返回一个最大值设置的数组,在这种情况下,它们大于5?用最大值限制迭代数组并返回
arr.forEach(function(index, theArray) {
if (theArray[index] > 5) theArray[index] = 5
})
console.log(arr) // [5.5, 0.1 8.4, 4.3, etc]
想[5, 0.1, 5, 4.3, etc]
可以使用map
和Math.min
:
arr = arr.map(n => Math.min(n, 5));
您需要添加一个参数吃从forEach
功能的当前元素。
输入
var arr = [5.5, 0.1, 8.4, 4.3];
代码
arr.forEach(function(_, index, theArray) {
if (theArray[index] > 5) theArray[index] = 5;
})
console.log(arr)
输出
[5,0.1%,5,4.3]
参考文档:
语法
arr.forEach(callback[, thisArg])
参数
回调
功能以执行用于每个元素,以三个参数:
CurrentValue的
阵列中正在处理的当前元素。
索引
当前元素的索引阵列中的正在处理中。
阵列
的阵列的forEach()被施加到。
thisArg
可选。在执行回调时使用此值。
返回值
undefined
您的代码还可以缩短一点,采取这种其他未使用的变量的优势。
arr.forEach(function(element, index, theArray) {
if (element > 5) theArray[index] = 5;
}
请注意,如果你想做到这一点没有突变的原始数组,你也有地图的选项。
arr.map(function(e) { return Math.max(e, 5); }
对于大的输入,并'map'最终创建的元素相对于在适当位置变形例的第二映射副本。还是编译器足够聪明,看到你立即覆盖'arr'? – arcyqwerty
@arcyqwerty不确定实现什么,但是,它可能会浪费内存以用于巨大的数组。但在这种情况下,我会使用typedarrays而不是普通的数组。 – Oriol