2016-03-29 13 views
0

私はこの課題を解決しようとしています。Seek and Destroy。何が間違っているのか分かりません。どんな助け?freecodecamp挑戦 - 探索と破壊

シークとデストロイヤー 最初の配列(destroyer関数の最初の引数)と1つ以上の引数が提供されます。これらの引数と同じ値を持つすべての要素を初期配列から削除します。

これは、以下の初期のコードです:

function destroyer(arr) { 
 
    // Remove all the values 
 
    return arr; 
 
} 
 

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

これは、以下の私のコードです:事前に

function destroyer(arr) { 
 
    var letsDestroyThis = []; 
 
    var i =1 ; while (i<arguments.length) { 
 
    letsDestroyThis.push(arguments[i]); 
 
    i++; 
 
    } 
 
    
 
    for(var j=0 ; j< arguments[0].length; j++) { 
 
    for (var k= 0; k< letsDestroyThis.length; k++) { 
 
     if(arguments[0][j] === letsDestroyThis[k]){ 
 
     arguments[0].splice(j, 1); 
 
     } 
 
    } 
 
    } 
 
    
 
    return arguments[0]; 
 
} 
 

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

ありがとう!

答えて

4

削除されるはずのすべての値の配列を作成できます。次に、Array.filterを使用してこれらの値を除外します。

注:Array.spliceは元の配列を変更します。

function destroyer() { 
 
    var arr = arguments[0]; 
 
    var params = []; 
 

 
    // Create array of all elements to be removed 
 
    for (var k = 1; k < arguments.length; k++) 
 
    params.push(arguments[k]); 
 
    
 
    // return all not matching values 
 
    return arr.filter(function(item) { 
 
    return params.indexOf(item) < 0; 
 
    }); 
 
} 
 

 
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

0

私の答えは、前のものと似ていますが、私はindexOfを使用していませんでした。その代わりに私はサイクルで値をチェックしましたが、コンパイラはサイクルで関数を宣言しないよう警告してくれました。

function destroyer(arr) { 
// Remove all the values 
var temp = []; 
for (var i = 1; i < arguments.length; i++) { 
    temp.push(arguments[i]); 
    arr = arguments[0].filter(function(value) { 
     return (value !== temp[i - 1]) ; 
    }); 
} 
return arr; 
} 
destroyer([1, 2, 3, 1, 2, 3], 2, 3); 
0

これが私の仕事:FreeCodeCamp にシークと破壊の挑戦を解決する

function destroyer(arr) { 
// Remove all the values 

var args = Array.from(arguments); 
var filter = []; 

for (i = 0; i < args[0].length; i++){ 
for(j = 1; j < args.length; j++){ 
    if (args[0][i] === args[j]){ 
    delete args[0][i]; 
    } 
} 
} 

return args[0].filter(function(x){ 
return Boolean(x); 
}); 
} 

console.log(
destroyer([1, 2, 3, 1, 2, 3], 2, 3) 
); 
0

//二つの方法を、私はこのコードを単純化しようとしていた//、簡素化し、あなたのソリューションを投稿してくださいコードは //同じくらい------------------------------- //

function destroyer1 (arr){ 
    //get array from arguments 
    var args = Array.prototype.slice.call(arguments); 
    args.splice(0,1); 
    for (var i = 0; i < arr.length; i++){ 
    for(var j = 0; j < args.length; j++){ 
     if(arr[i]===args[j]){ 
     delete arr[i]; 
     } 
    } 
} 
return arr.filter(function(value){ 
    return Boolean(value); 
}); 
} 

その可能性を持っています-------

function destroyer(arr) { 
    // Remove all the values 
    //Get values from arguments of the function to an array, index 0(arr[0] will be "arr", 
    //rest of indexes will be rest of arguments. 

    var args = Array.from(arguments); 
    for (var i = 0 ; i < args[0].length; i++){ 
    for (var j = 1; j < args.length; j++){ 
     if(args[0][i] === args[j]){ 
      delete args[0][i]; 
     } 
    } 
    } 
    return args[0].filter(function(value){ 
    return Boolean(value); 
    }); 
} 

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); 
console.log(destroyer1([1,6,3,9,8,1,1], 3,1)); 
0

これは私のコードです:ここでは

function destroyer(arr) { 
 
    var argsBeRemove = [...arguments]; 
 
    argsBeRemove.shift(); 
 
    return arr.filter(val => { 
 
    return argsBeRemove.indexOf(val) == -1; 
 
    }); 
 
} 
 

 
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

+0

このコードは質問に答えるかもしれないが、その理由及び/またはどのようにこのコードは答える質問はその長期を向上に関する追加のコンテキストを提供します長期価値。 –

0

はシークと破壊の私のバージョンです。私は入力にゼロ要素がないと仮定します(その仮定はチャレンジを渡すことができます)。しかし、そのようにして、見つかった要素をゼロにして、それらを単に除外することができます。 forループ内の要素を削除するときにはかなり簡単で、インデックスの混乱はありません。

function destroyer(arr) { 
// Remove all the values 
var args = Array.prototype.slice.call(arguments); 

var temp=[]; 
    temp = arguments[0].slice(); 

    for (j=1; j<args.length; j++){ 

    for (i=0; i<arguments[0].length; i++){ 

    if(arguments[0][i]==arguments[j]){ 

    temp[i]=0;    
    } 
    } 
} 

function isZero(value) { 
return value !== 0; 
} 

var filtered = temp.filter(isZero); 

return filtered; 

}

0
function destroyer(arr) { 

    var args = Array.prototype.slice.call(arguments, 1); 
    return arr.filter(destroyNum); 

    function destroyNum(element) { 
     return !args.includes(element); 
    } 
} 
+1

あなたの答えを説明してください。それはより明確で理解を与えます。 –

0

これを試してみてください:

function destroyer(arr) { 
    /* Put all arguments in an array using spread operator and remove elements 
    starting from 1 */ 
    const args = [...arguments].splice(1); 
    /* Check whether arguments include elements from an array and return all that 
    do not include(false) */ 
    return arr.filter(el => !args.includes(el)); 
} 

destroyer([1, 2, 3, 1, 2, 3], 2, 3); // [1, 1] 
関連する問題