2016-07-22 31 views
0

如何返回一个最大值设置的数组,在这种情况下,它们大于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]

回答

3

可以使用mapMath.min

arr = arr.map(n => Math.min(n, 5)); 
+0

对于大的输入,并'map'最终创建的元素相对于在适当位置变形例的第二映射副本。还是编译器足够聪明,看到你立即覆盖'arr'? – arcyqwerty

+0

@arcyqwerty不确定实现什么,但是,它可能会浪费内存以用于巨大的数组。但在这种情况下,我会使用typedarrays而不是普通的数组。 – Oriol

1

您需要添加一个参数吃从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); }