配列をフィルタリングして一意の値のみを含める必要があります。これが私の配列データです
["X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11"]
期待される結果は
["X_row7", "X_row4", "X_row6", "X_row10", "X_row11", "X_row8", "X_row9"]
適切な結果を得るには、コードをどのように続行すればよいですか。
newArray = [];
for(n in data){
if(!newArray.indexOf(n)){
newArray.push(n);
}
}
console.log(newArray);
追加情報が必要な場合はお知らせください。提供いたします。ありがとうございます
ベストアンサー1
使用できます配列.フィルターコールバック関数の戻り値に基づいて配列の要素をフィルターする関数。コールバック関数は、元の配列のすべての要素に対して実行されます。
ここでのコールバック関数のロジックは、indexOf
現在の項目の値がインデックスと同じである場合、要素が初めて検出されたことを意味し、一意であると見なすことができます。そうでない場合は、要素がすでに検出されたことを意味するため、今すぐ破棄する必要があります。
var arr = ["X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11", "X_row7", "X_row4", "X_row6", "X_row10", "X_row8", "X_row9", "X_row11"];
var filteredArray = arr.filter(function(item, pos){
return arr.indexOf(item)== pos;
});
console.log( filteredArray );
警告:指摘したように奪うコメントによると、このメソッドは で実行されるため、非常に大きな配列では使用しないでくださいO(N^2)
。
更新 (2017 年 11 月 16 日)
頼れるならES6の機能、その後はオブジェクトの設定そしてスプレッド演算子下記の @Travis Heeter の回答で既に指定されているように、指定された配列から一意の配列を作成します。
var uniqueArray = [...new Set(array)]