2016-10-29 3 views
-3

は、アレイJavascriptの配列内にある複数の要素の出現をすべて削除するにはどうすればよいですか?例えば

[1, 2, 3, 2, 4] 

から値2を除去して、私は、フィルタを使用する場合、それが唯一の私が欲しいものではないれ、2回目以降の発生を除去

[1, 3, 4] 

結果を生成しなければなりません。

複数回発生するすべての値は、完全に削除する必要があります。

+2

あなたは、複数のオカレンスを削除したいと思いますが、複数のオカイを削除するとしますレニングスは「私が欲しいものではない」... ...? – Utkanos

+0

配列内の複数の変数のインスタンスをすべて削除したい場合は – anonymous

答えて

1

以前に並べ替え、あなたの配列は、あなただけの、そのneighbourgと同じである要素を削除する必要がある場合:

var input = [1, 2, 3, 2, 4, 5, 6, 5 , 5, 1]; 
var result = input.sort().filter((x,i,arr) => x !== arr[i+1] && x !== arr[i-1])); 
console.log(result); // [3, 4, 6 ] 
+0

しかし、彼はすべての** ** 2つの(そして5つの)を削除したいと考えています。 –

+0

@torazaburoあなたのハワイに感謝します。私はちょうどバグを修正するために編集しました –

2

あなたはfilter()でこれを行うと同じindexOf()lastIndexOf()

を持っている要素のみを返すことができます

var data = [1, 2, 3, 2, 4, 1, 1]; 
 

 
var result = data.filter(function(e) { 
 
    return data.indexOf(e) == data.lastIndexOf(e); 
 
}); 
 

 
console.log(result)

0

提案ウィットhoutソート。

var data = [1, 2, 3, 2, 4], 
 
    filtered = data.filter(function (a) { 
 
     return this[a] === 1; 
 
    }, data.reduce(function (r, a) { 
 
     r[a] = (r[a] || 0) + 1; 
 
     return r; 
 
    }, {})); 
 

 
console.log(filtered);

0

最も簡単な解決策は、単に複数回発生するいかなる見つかった項目のマップを維持するために、そして常にフィルタのもの

var arr = [1, 2, 3, 2, 4]; 
 
var map = []; 
 

 
var filtered = arr.filter(function(item, index) { 
 
    if (arr.lastIndexOf(item) !== index) map.push(item); 
 
    return map.indexOf(item) === -1; 
 
}); 
 

 
console.log(filtered)

を削除し、おそらくです
関連する問題