2017-07-29 56 views
0

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

这是我到目前为止,但我只得到[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

解决的办法很简单,你只需要在元素更改为最高。 假设你是JS的初学者,下面的解决方案应该对你更容易理解。使用地图的另一个答案,可能脱落的那样神奇,这应该是更有效,但它依赖于浏览器如何处理的地图功能,在大多数情况下,浏览器都实现它相当精细

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));

+1

谢谢!这很有道理,是的,我刚刚开始学习JS – stephanoula

3

可以对付它用简单的一行,使用Array#map

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

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

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

'Math.min(a,value)'? –