2017-04-10 7 views
-2

私はちょうど追いかけて切ります。同じ日付のオブジェクトは、このような自分自身の個々のアレイに戻るように私は、配列をフィルタリングするにはどうすればよい個々の配列に等しい値を持つ各オブジェクトをフィルタリングする

[{value: 67, date: 91}, {value: 48, date: 91}, {value: 15, date: 92}, {value: 77, date: 92}, {value: 10, date: 93}, {value: 5, date: 93}] 

のは、私はいくつかのオブジェクトの日付が等しいオブジェクトの単純な配列を、持っているとしましょう:

[{value: 67, date: 91}, {value: 48, date: 91}] 
[{value: 15, date: 92}, {value: 77, date: 92}] 
[{value: 10, date: 93}, {value: 5, date: 93}] 
+0

それは_DATE_のプロパティの値が一定の範囲(例えば91-93)であることが知られていますか? –

+0

期待される結果は多次元配列ですか? – guest271314

+0

いいえ@ guest271314、これは問題ありません。同じ日付のオブジェクトが自分の配列に含まれている限り、それは良いことです。値は関係ありません。無視されます。 –

答えて

2

方法、注意事項については使用してarray.reduce()

var array = [{value: 67, date: 91}, {value: 48, date: 91}, {value: 15, date: 92}, {value: 77, date: 92}, {value: 10, date: 93}, {value: 5, date: 93}]; 
 
filteredArray = array.reduce((pre,curr)=> { 
 
    // check if the object has unqiue date as key 
 
    if(!pre.hasOwnProperty(curr['date'])){ 
 
     // if not, create an array with the unique date as key 
 
     pre[curr['date']] = []; 
 
    } 
 
    //push current value to array based on date 
 
    pre[curr['date']].push(curr); 
 
    // return the object 
 
    return pre; 
 
}, {}); 
 
console.log(filteredArray); 
 
console.log(Object.keys(filteredArray)); 
 
var asArray = Object.keys(filteredArray).reduce((pre,curr)=>{pre.push(filteredArray[curr]); return pre},[]) 
 
console.log(asArray);

についてのコメントを参照してください。

EDIT:あなたは簡単に独自の日付を取得することができます

この方法です。 Object.keys(filteredArray)を行うことによって、あなたはdateは、オブジェクトのプロパティがある場合はtrueの場合、チェックするためにfor..ofin演算子を使用することができるだけでasArray = Object.keys(filteredArray).reduce(e)=>{prev.push(filteredArray[e]); return pre},[]}

+0

これは3つのオブジェクトを削除します。私は、同じ日付のオブジェクトを自分の配列に移動する必要があります。すべてのオブジェクトが残る必要があります。 –

+0

はオブジェクトの3つを削除しますか?どちらを参考にしていますか? –

+0

さらに優れています。 Thxメイト! –

0

var items = [{value: 67, date: 91}, {value: 67, date: 91}, {value: 67, date: 92}, {value: 67, date: 92}, {value: 67, date: 93}, {value: 67, date: 93}]; 
 

 
var storage = {}; 
 
items.map((item) => { 
 
    storage[JSON.stringify(item)] = true; 
 
}) 
 
    
 
for(element in storage) { 
 
    console.log(JSON.parse(element)); 
 
}

このコードに関する小さな考察は、各オブジェクトの要素がそうでなければ、あなたが持っている場合、たとえば秋に予定され、注文が必要です。

{ value: 67, date: 91 } 
{ date: 91, value: 67 } 

の両方が上記のコードを使用して別の要素です。

+0

これは3つのオブジェクトを削除します。私は、同じ日付のオブジェクトを自分の配列に移動する必要があります。すべてのオブジェクトが残る必要があります –

2

を行うことによって配列を抽出したり、そのプロパティでオブジェクトの配列にオブジェクトのvaluedateを追加

let arr = [{value: 67, date: 91} 
 
      , {value: 67, date: 91} 
 
      , {value: 67, date: 92} 
 
      , {value: 67, date: 92} 
 
      , {value: 67, date: 93} 
 
      , {value: 67, date: 93} 
 
      ]; 
 

 
let res = {}; 
 

 
for (let {value, date} of arr) { 
 
    if (!(date in res)) res[date] = Array({value,date}) 
 
    else res[date] = [...res[date], {value, date}] 
 
} 
 

 
console.log(res);

+0

素晴らしい、あなたの男! –

+0

'in'演算子の使用に注意してください:'プロトタイプチェーンでもキーが存在すれば真を返します '。より良い安全な方法は、 'res.hasOwnPropert(date)'を使うことです。 –

関連する問題