2017-04-10 54 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);

對於票據,參考意見。

編輯:

這樣,您就可以輕鬆獲得獨特的日期。通過這樣做Object.keys(filteredArray)或只是做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)); 
 
}

瞭解這個編碼A小的考慮,是必須訂購的每個對象上的元素,否則將要下降,例如,如果你有:

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

兩者都是使用上面的代碼不同的元素。

+0

這會刪除3個對象。我需要將具有相同日期的對象移動到它們自己的數組中。所有對象必須保留 –

2

提取陣列可以使用for..ofin運營商,以檢查是否date是一個對象的屬性如果爲真,在這個屬性添加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

太棒了,thx男人! –

+0

使用'in'運算符時要小心:'如果key存在,即使在原型鏈中它也會返回true。更好更安全的方法是使用:'res.hasOwnPropert(date)' –

相關問題