2015-12-02 79 views
0

我正在解決coding exercise並遇到了一個有趣的問題。我想通過參數過濾一個數組(我事先不知道會有多少個參數)。所以我的函數的第一個參數總是一個數組,隨後是我需要過濾的整數的隨機數。JavaScript嵌套在陣列過濾器內的循環

我想我會通過在我的過濾器函數中嵌套一個for循環來解決這個問題,但到目前爲止它只能通過第一個參數進行過濾並忽略第二個參數。這是由於使用return false/true?如果是這樣,我可以使用什麼?

function destroyer(arr) { 
 
    var output = []; 
 
    for (var y = 1; y < arguments.length; y++) { 
 
    output.push(arguments[y]); 
 
    } 
 

 
    function destroy(value) { 
 
    for (var x = 0; x < output.length; x++) { 
 
     if (value === output[x]) { 
 
     return false; 
 
     } else { 
 
     return true; 
 
     } 
 
    } 
 
    } 
 
    return arr.filter(destroy); 
 
} 
 

 
destroyer([1, 2, 3, 1, 2, 3], 2, 3);

感謝您的幫助

回答

2

請移動return true到函數的結束,因爲for循環只能停止,如果不想要的值被發現。

function destroyer(arr) { 
 
    var output = []; 
 
    for (var y = 1; y < arguments.length; y++) { 
 
     output.push(arguments[y]); 
 
    } 
 

 
    function destroy(value) { 
 
     for (var x = 0; x < output.length; x++) { 
 
      if (value === output[x]) { 
 
       return false; 
 
      } 
 
     } 
 
     return true; 
 
    } 
 
    return arr.filter(destroy); 
 
} 
 

 
document.write(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

2

是方式複雜得多,它需要的。這在較少的代碼行中會做同樣的事情,並且我會爭辯說它更清晰且更易於閱讀

function destroyer(arr) { 
    // get all the arguments after the initial array 
    var output = Array.prototype.slice.call(arguments, 1); 
    // filter the output 
    return arr.filter(function destroy(value) { 
    // only return the numbers that aren't in the output array 
    return output.indexOf(value) < 0; 
    }); 
    // profit. 
} 

destroyer([1, 2, 3, 1, 2, 3], 2, 3);