2016-07-06 6 views
1

別の配列から1つの配列の値を除外しようとしています。 Javascriptのフィルタメソッドを使用すると、スクリプトは次のようになります。私はフィルタ機能を実行した後、私はareas配列を慰めるときフィルター方法を別の配列で置き換える

var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"]; 

var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"]; 

areas.filter(function(){ 
    return areas = notUsed; 
}) 
console.log(areas); 

文書によると、配列はこの

"A Area", "B Area", "C Area" 

のようになります。しかし、それは何が起こっているかではありません。代わりに、私はnotUsed配列の値を取得しているので、実質的に領域配列をnotUsed配列に置き換えています。誰もがなぜこれが起きているのか、そしてnotUsed配列の値を持たないareas配列を得る方法について説明できますか?

この質問が既に尋ねられている場合は、私にコメントと回答のある質問へのリンクをお知らせください。私はこの方法を削除して重複を排除することができます。

答えて

1

2つの間違い。

  1. areas = notUsed単にそれは、それらを比較しない、areasnotUsedの値を代入します。

  2. filterは新しい配列を返します。元の配列は変更されません。

おそらくあなたは今、この

areas = areas.filter(function (area) { 
    return notUsed.indexOf(area) === -1; 
}); 

のようにそれを書くことができ、notUsed.indexOf(area)notUsed配列にareaのインデックスを返します。見つけられなかった場合は、-1を返します。

また、filterの結果をareasに戻してください。

+0

素晴らしい、ありがとうございました。なぜこれがドキュメンテーションで説明されていることではないか、あなたが知っていますか?元の配列は変更されていないと説明していますが、このようなことを行う方法は示されていません。少なくとも、私が見たことではない。 –

+0

@Robert [MDNにはいくつかの例があります](https://developer.mozilla。org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter#例)。 – thefourtheye

0

フィルタの使用が正しく理解されていません。

var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"]; 

var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"]; 

var res = areas.filter(function(ele){ 
    return (notUsed.indexOf(ele) == -1) 
}) 
console.log(res); 
0

フィルター機能は、ユーザーが実装した条件に対して配列の値をテストする必要があります。あなたの例ではそうではありません。 Filter Function

これは可能な解決策です。

var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"]; 
 

 
var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"]; 
 

 
var filtered = areas.filter(value => { return notUsed.indexOf(value) === -1 }) 
 
console.log(filtered);

0

filter()方法が提供する機能によって実現テストに合格するすべての要素を使用して新しい配列を作成します。

var notUsed = ["Advanced Tac. Training Area", "Dunbarton Railroad Yard"];  
 
    var areas = ["A Area", "Advanced Tac. Training Area", "B Area", "Dunbarton Railroad Yard", "C Area"];  
 
    var out = areas.filter(function(index) { 
 
    return notUsed.indexOf(index) == -1; 
 
    }); 
 
    console.log(out);

関連する問題