引数

2016-10-28 3 views
1

に基づいて配列から番号を削除するにはどうすればこのような二つの配列を持つ:引数

私は最初の配列で利用可能な番号に基づいて二番目の配列から数字を削除したい
var arr = ["1", "3" , "4"]; 
var arr2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]; 

私はこれを試してみましたが、私は、2,4,6,8のように間違った値を取得しています:ここで

theButton.onclick = function removePassedInNumbers(arr){ 
    for(var i = 0; i < arr2.length; i++){ 
    if(arr2.indexOf(arr[i])){ 
     arr2.splice(i, 1); 
    } 
    } 
    document.getElementById('myNumber').innerHTML = arr2; 
} 

<input type="button" id="theButton" onclick="removePassedInNumbers(arr)" value="Click here"/> 
<p id="myNumber">hey</p> 

はフィドルです:私は間違って行くのですhttps://jsfiddle.net/4hLcanc6/

+0

あなたはどんな出力を期待していますか? –

答えて

1

これは正しくありません。一部のユーザーが既に回答している場合でも、配列をフィルタリングするためのより良い方法があるとしても、なぜこのループを間違っているのか説明しようとしています。

はあなたがARR2に変数 iあなたの現在の位置に保存している最初の行ここ

for(var i = 0; i < arr2.length; i++) 

から始めましょう。 OK。

if(arr2.indexOf(arr[i])) 

これはいいえです。 arr[i]が存在しない可能性があります。 Infact、arr[3]は未定義で、ループに入る4回目にそれを探しています。 これを修正しましょう:

if(arr.indexOf(arr2[i])) 

今は大丈夫です。 arrの内部を調べて、arr2[i]の値を見つけようとしています。これはループで初めてジャンプしたときに「1」、2回目に「2」、最後に「9」になります。

これで動作します。要約すると:

for(var i = 0; i < arr2.length; i++){  
    if(arr.indexOf(arr2[i])){ 
    arr2.splice(i, 1); 
    } 
} 

これはあなたのコードで何が起こっているのかを理解するのに役立ちます。

+0

私は間違っていた場所を明確に理解しています – Satyadev

2

あなたはこの

var arr = ["1", "3" , "4"]; 
 
var arr2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]; 
 

 
arr.forEach(function(n){ 
 
    var index = arr2.indexOf(n); 
 
    if(index !== -1) arr2.splice(index, 1); 
 
}) 
 

 
console.log(arr2);

ようなもので、あなたのfunctionを更新することができます。あなたは、元のarr2を変更せずに新しい配列をしたい場合は、あなたがしなければならない、spliceはあなたの配列arr2を変更しますfilterを使用してください。

+0

しかし、どこが間違っていたのですか?私に教えてください – Satyadev

+0

1 - 'arr2.length'は' arr.length'だったはずです。 2 - 'arr2.indexOf(arr [i])'は 'arr2.indexOf(arr [i])!== -1'でなければなりません。 3 - 'arr2'配列に' index'を格納する必要がありますので、 'splice'することができます。 @Satyadev – taguenizy

+0

私はそれを変更しましたが、動作しません。https://jsfiddle.net/4hLcanc6/2/ – Satyadev

3

あなただけのフィルタ()メソッドを使用することができます

var arr = ["1", "3" , "4"]; 
var arr2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]; 
var res = arr2.filter(item => arr.indexOf(item)===-1); 
console.log(res); // [ '2', '5', '6', '7', '8', '9' ] 

またはES5とを:forループ

var res = arr2.filter(function(x) {return arr.indexOf(x)===-1}); 
+0

ES5の構文を教えてください。ありがとう – Satyadev

+0

@Satyadev:私はちょうどES5のために編集しました –