2015-10-19 20 views
0

我想從JavaScript中的if循環中的if條件創建一個新數組。到目前爲止,新的數組返回undefined時:在Javascript中搜索由整數組成的數組並返回具有值的新數組

if(numbers[i] <= num) 

我需要返回是小於或等於num的值的所有元素,並從他們創造一個新的數組。有人能告訴我我做錯了什麼嗎?

function search(num, numbers) { 
    for (i = 0; i < numbers.length; i++){ 
    var x = []; 

    if(numbers[i] <= num){ 
    x.push(numbers[i]);} 
    } 
return x; 
} 

(search(14, [7, 3, 23, 9, 14, 20, 7]) 
+0

你正在做的不對,你重新聲明'變種X = []'在每個循環。 – davidkonrad

回答

4

您應該使用array.filter

function search(num, numbers) { 
    return numbers.filter(function(n) { return n <= num }); 
} 

search(5, [1,3,44,7,10]) //returns [1,3] 

的核心問題與上面的代碼是你在for循環的每個迭代聲明var x = [] - 它的每一次改寫。

0

看起來像你正在迭代另一個數組「價格」的長度可能大於數組數組,這就是爲什麼你得到未定義。

移動X = []的每個值的for循環,因爲它是越來越復位外部for循環

「prices.length」

可以使用underscore.js濾波器函數爲這個

bigValues = function(array){ 
     return _.filter(array, function(element){ 
      return element > 10; 
     }); 
    } 
var array = [ 1, 2, 3, 10, 11, 23 ]; 

var bigResult = bigValues(array); 
0
  1. 沒有名爲「價格」的數組。您應該將「價格」 替換爲「數字」。這就是爲什麼你沒有定義。
  2. 在for循環之外移動x = []。否則,x會在每次通過for循環時用空數組實例化。每次你的函數迭代循環時,你的代碼似乎都會清除x的內容。

function search(num, numbers) { 
 
    var x = []; 
 
    for (i = 0; i < numbers.length; i++){ 
 
    
 

 
    if(numbers[i] <= num){ 
 
    x.push(numbers[i]);} 
 
    } 
 
return x; 
 
} 
 

 
$('p').text(search(14, [7, 3, 23, 9, 14, 20, 7]));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<p></p>

fiddle