我正在尝试编写一个接收数组和最大截止数的函数。该数字是字符串可以包含的最大数字,此数字将替换大于该数字的所有数组元素。例如,如果数组为[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));
答案 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));