簡體   English   中英

我被這個 FreeCodeCamp 算法困住了

[英]I'm stuck with this FreeCodeCamp algorithm

function destroyer(arr) {
    // Remove all the values
    var toFilter;
    var toFrom;
    for(var i=0;i<arguments.length;i++) {
        if (typeof arguments[i]=="object") {
            toFilter = arguments[i];
        } else {
            toFrom = arguments[i];
        }
    }

    var result = toFilter.filter(function(value,index,array) {

        if(value===toFrom) {
            return true;
        }

        return result;

    });

    console.log(result);

}

destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return [1,1]

我試圖解決這個算法已經快一個多星期了。 在這個任務中,我們需要刪除初始數組中存在的參數值,他們提到通過使用參數和過濾方法來解決這個問題。 好吧,我知道過濾器和參數在 Javascript 中的作用,我使用過濾器方法解決了以前的算法,我閱讀了參數和它的使用,但以前從未使用過。 每次我使用這兩個做某事時,它都會給我一個空白數組。 請任何人都可以幫助我我們如何使用過濾器和參數來做到這一點?

只是我的想法,你可以按照你想要的方式修改它:

function isValid() {
  return value != 2 && value != 3;
}
var arr = [1, 2, 3, 1, 2, 3];
arr.filter(isValid); //It should return [1,1];

您現在需要的是從arguments對象中獲取 2 和 3 值並更改 isValid 函數。

您可以做的是構造要從數組中刪除的值的查找,然后通過返回查找中不存在的值來過濾原始數組:

 function destroyer(arr) { var lookup = {}; // For each remaining argument, add it to the lookup. for (var i = 0; i < arguments.length; i++) { lookup[arguments[i]] = true; } // Filter the array and return a new array // with elements that don't exist in the lookup. return arr.filter(function(elem) { return typeof lookup[elem] === 'undefined'; }); } console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); //it should return [1,1]

有幾個問題,我們一一列舉:

  1. 您覆蓋toFrom ,因此您不是打算獲取所有非對象(即 2 和 3),而是只獲取最后一個非對象(即 3)
  2. filter() , return true表示“將此元素保留在列表中” ,如果值等於toFrom = 3則返回true
  3. 動詞solve不適用於名詞algorithm 因為算法解決問題的方法

我沒有嘗試,但我猜你的代碼會輸出[3,3] ,所以如果你想輸出[1,1] ,請嘗試根據你的版本修改代碼:

 function destroyer(arr) { // Remove all the values var toFilter; var toFrom = []; for(var i=0;i<arguments.length;i++) { if (typeof arguments[i]=="object") { toFilter = arguments[i]; } else { // maintain a list of ALL non-objects which to be filtered toFrom.push(arguments[i]); } } var result = toFilter.filter(function(value,index,array) { if(toFrom.indexOf(value) != -1) { // If element is in the toFrom list, DO NOT keep it return false; } return true; }); console.log(result); } destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return

或者你可以試試我的版本:)

 function destroyer(arr) { // Remove all the values for(var i=0;i<arguments.length;i++) { arr = arr.filter( x => x !== arguments[i]); } console.log(arr); } destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM