2017-07-29 74 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)'? –