2017-05-12 10 views
0

私はこのコードのように見える複数の同一要素を持つ配列をフィルタリングする必要があります。 uniqueVacantJavaScript - 同一の要素を持つ配列をフィルタリングする

vacant = [ 
"A510.4 - 0h 45 m", 
"A520.6 - 3h 0 m", 
"A250.1 - 3h 0 m", 
"A340.1 - 3h 15 m", 
"A320.2 - 3h 0 m", 
"A240.4 - 4h 0 m", 
"A210.3 - 4h 0 m", 
"A520.5 - 5h 0 m", 
"A250.1 - 6h 0 m", 
"A240.4 - 7h 0 m", 
"A320.6 - 8h 0 m", 
"A340.1 - 8h 0 m"] 

同一の要素 - 配列は、次のとおり

A250.1 - 3H 0メートル/ A250.1 - 6H 0メートル

A340.1 - 15メートル3H 7H 0メートル

-/A340.1 - 8H 0メートル

A240.4 - 4H 0メートル/ A240.4 210

私はすでに要素からタイムスタンプを除外しているので、必要なのは要素名を比較することだけです。

function getName(str) { 
    return str.substring(0, str.indexOf('-')); 
} 

var uniqueVacant = []; 
vacant.forEach(function (vacantStr) { 
    uniqueVacant.push(getName(vacantStr)) 
}); 

結果は、同じ名前の最初の要素を残し、後でプリントアウト第二1つを取り外し、このようになります。

uniqueVacant = [ 
"A510.4 - 0h 45 m", 
"A520.6 - 3h 0 m", 
"A250.1 - 3h 0 m", 
"A340.1 - 3h 15 m", 
"A320.2 - 3h 0 m", 
"A240.4 - 4h 0 m", 
"A210.3 - 4h 0 m", 
"A520.5 - 5h 0 m", 
"A320.6 - 8h 0 m"] 

// Removed A250.1 - 6h 0 m, A340.1 - 8h 0 m, A240.4 - 7h 0 m, 

タイマーが要素に対してアップしているとき、それらは、配列から削除されますと、アレイ内部には多くの類似点がありません場合は、その後、同じ名前の2番目の要素は、配列に戻って表示されるように注意。

類似点は日によって異なりますが、時には類似要素が2つしかなく、それ以外は8日以上であることもあります。

これを行うには、すばやく効果的な方法はありますか?

+0

で試してみてください? –

+0

@ NairAthul配列内の同じ要素を見つけてフィルタリングし、最初の要素を同じ名前にして残りの要素を削除する必要があります。 – IlariM

答えて

1

あなたはユニークな要素がそれではありません見つける必要がありArray#reduce

var vacant = [ 
 
    "A510.4 - 0h 45 m", 
 
    "A520.6 - 3h 0 m", 
 
    "A250.1 - 3h 0 m", 
 
    "A340.1 - 3h 15 m", 
 
    "A320.2 - 3h 0 m", 
 
    "A240.4 - 4h 0 m", 
 
    "A210.3 - 4h 0 m", 
 
    "A520.5 - 5h 0 m", 
 
    "A250.1 - 6h 0 m", 
 
    "A240.4 - 7h 0 m", 
 
    "A320.6 - 8h 0 m", 
 
    "A340.1 - 8h 0 m" 
 
] 
 

 
console.log(vacant.reduce((a, b) => { 
 
    var k = a.map(a => a.split('-')[0]) 
 
    if (!k.includes(b.split("-")[0])) { 
 
    a.push(b) 
 
    k.push(b.split("-")[0]) 
 
    } 
 
    return a; 
 
}, []))

関連する問題