2017-09-03 128 views
0
var place =[ 
{city: "Durham, NC, United States", begin: "09/04/2017", id: 0}, 
{city: "Raleigh, NC, United States", begin: "09/11/2017", id: 1}, 
{city: "Durham, NC, United States", begin: "09/25/2017", id: 2}, 
{city: "Durham, NC, United States", begin: "09/25/2017", id: 3} 
] 

從上面我想創建一個新的數組,其中包含具有唯一城市/開始屬性組合的對象。因此,就上述數組而言,結果將僅包含前3個對象,因爲對象3和4包含相同的city/begin屬性。如何過濾具有屬性的唯一組合的對象

我已經嘗試了/ if以及其他數組方法的各種組合,但沒有成功,所以任何建議,將不勝感激。

回答

0

您可以在這裏使用地圖。 地圖中的鍵爲city,值爲begin的數組。然後,您可以使用此地圖過濾出重複項。

var map = new Map; 
var len = place.length; 
var newArr = []; 
for(i = 0; i < len; i++){ 
var obj = place[i]; 
if(map[obj.city] === undefined || map[obj.city] === null){ 
    map[obj.city] = []; 
    map[obj.city].push(obj.begin); 
    newArr.push(obj); 
}else if(!map[obj.city].includes(obj.begin)){ 
    map[obj.city].push(obj.begin); 
    newArr.push(obj); 
} 
} 
+0

謝謝 - 該解決方案是完美的 - 這樣我就可以從過濾newArr對象工作。 – mac

0

使用下劃線庫中的一個簡單的解決方案:

var list = [ 
    { city: 'Durham, NC, United States', begin: '09/04/2017', id: 0 }, 
    { city: 'Raleigh, NC, United States', begin: '09/11/2017', id: 1 }, 
    { city: 'Durham, NC, United States', begin: '09/25/2017', id: 2 }, 
    { city: 'Durham, NC, United States', begin: '09/25/2017', id: 3 }, 
]; 

var uniqueList = _.uniq(list, function(v) { 
return v.x && v.y; 
}); 

console.log(uniqueList); 
+0

謝謝 - 在此之前我還沒有聽說過下劃線 - – mac

+0

不用擔心,它來自underscore.js庫或者您可以使用lodash庫。 –

0

您可以使用array#reducearray#some。您可以將所有唯一值存儲在一個新對象中,並用它來檢查新對象是否是唯一的或是否與早期對象重複。

var places =[{city: "Durham, NC, United States", begin: "09/04/2017", id: 0},{city: "Raleigh, NC, United States", begin: "09/11/2017", id: 1},{city: "Durham, NC, United States", begin: "09/25/2017", id: 2}, {city: "Durham, NC, United States", begin: "09/25/2017", id: 3}]; 
 

 
var uniquePlaces = places.reduce((hash, obj) => { 
 
    let isExist = Object.values(hash).some(v => v.city === obj.city && v.begin === obj.begin); 
 
    return !isExist ? Object.assign(hash, {[obj.id] : obj}) : hash; 
 
}, Object.create(null)); 
 

 
var result = Object.values(uniquePlaces); 
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

相關問題