在javascript中用不同的数字替换数组元素

时间:2017-07-29 21:25:59

标签: javascript arrays function

我正在尝试编写一个接收数组和最大截止数的函数。该数字是字符串可以包含的最大数字,此数字将替换大于该数字的所有数组元素。例如,如果数组为[1,2,3,4,5,6]且截止数为4,则输出应为[1,2,3,4,4,4]。

这是我到目前为止所做的,但我只得[1,2,3,4,5]作为输出而不是[1,2,3,3,3]。有什么建议??

var maxCutoff = function(array, number) {
    for (var i=0; i<array.length; i++) {
        if (array.indexOf(i) > number) {
            array.pop();
            array.push(number);
            return array;
        } else if (array.indexOf(i) <= number) {
            return array;
        }
    }
}
console.log(maxCutoff([1,2,3,4,5], 3));

3 个答案:

答案 0 :(得分:3)

您可以使用Array#map来使用简单的单行处理它。

const maxCutoff = (arr, num) => arr.map(v => v > num ? num : v);

console.log(maxCutoff([1,2,3,4,5], 3));

答案 1 :(得分:2)

您可以使用三元作为映射结果。

const maxCutoff = (array, value) => array.map(a => a > value ? value : a);

console.log(maxCutoff([1, 2, 3, 4, 5], 4));

Math.min表示映射结果。

const maxCutoff = (array, value) => array.map(a => Math.min(a, value));

console.log(maxCutoff([1, 2, 3, 4, 5], 4));

答案 2 :(得分:0)

解决方案非常简单,您只需将元素更改为最大值即可。 假设您是JS的初学者,下面的解决方案对您来说应该更容易理解。使用map的另一个答案可能会变得神奇,应该更高效,但这取决于浏览器处理地图功能的程度,在大多数情况下,浏览器确实很好地实现了它

var maxCutoff = function(array, number) {
    for (var i=0; i<array.length; i++) {
        if(array[i]>number)
          array[i] = number;
    }
    return array
}
console.log(maxCutoff([1,2,3,4,5], 3));