簡體   English   中英

如何使用spread運算符從對象數組中刪除重復項

[英]How to remove duplicates from an object array using spread operator

我有下面的對象數組,id為唯一鍵“:

var test = [
  {id: 1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: ""},
  {id: 2, PlaceRef: "*00022", Component: "BAXI10R", SubLocCode: "KIT", BarCode:""},
  {id: 1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: ""},
  {id: 3, PlaceRef: "*00011", Component: "ANR190", SubLocCode: "B1", BarCode: ""}
]

從這里我想使用spread運算符檢索唯一對象,我嘗試使用下面的代碼:

const uniKeys = [...(new Set(test.map(({ id }) => id)))];

我只能檢索id,如何使用spread運算符檢索唯一對象。 此外,任何新的ES6功能實現都會有所幫助。

您可以使用find方法map回對象數組,這將返回具有該id的第一個對象。

 var test = [{id:1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: ""},{id:2, PlaceRef: "*00022", Component: "BAXI10R", SubLocCode: "KIT", BarCode:""},{id:1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: ""},{id:3, PlaceRef: "*00011", Component: "ANR190", SubLocCode: "B1", BarCode: ""}] var uniq = [...new Set(test.map(({id}) => id))].map(e => test.find(({id}) => id == e)); console.log(uniq) 

您也可以使用filter方法。

 var test = [{id:1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: ""},{id:2, PlaceRef: "*00022", Component: "BAXI10R", SubLocCode: "KIT", BarCode:""},{id:1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: ""},{id:3, PlaceRef: "*00011", Component: "ANR190", SubLocCode: "B1", BarCode: ""}] var uniq = test.filter(function({id}) { return !this[id] && (this[id] = id) }, {}) console.log(uniq) 

您可以使用Set和過濾未知id

 var test = [{ id: 1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: "" }, { id: 2, PlaceRef: "*00022", Component: "BAXI10R", SubLocCode: "KIT", BarCode: "" }, { id: 1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: "" }, { id: 3, PlaceRef: "*00011", Component: "ANR190", SubLocCode: "B1", BarCode: "" }], unique = test.filter((s => ({ id }) => !s.has(id) && s.add(id))(new Set)); console.log(unique); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

您可以按ID創建Map,然后提取值。 [...new Map(test.map(item => [item.id, item])).values()]

 var test = [{id:1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: ""}, {id:2, PlaceRef: "*00022", Component: "BAXI10R", SubLocCode: "KIT", BarCode:""}, {id:1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: ""}, {id:3, PlaceRef: "*00011", Component: "ANR190", SubLocCode: "B1", BarCode: ""}] console.log([ ...new Map(test.map(item => [item.id, item])).values() ]) 

 var test = [{id:1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: ""}, {id:2, PlaceRef: "*00022", Component: "BAXI10R", SubLocCode: "KIT", BarCode:""}, {id:1, PlaceRef: "*00011", Component: "BATH", SubLocCode: "BAT", BarCode: ""}, {id:3, PlaceRef: "*00011", Component: "ANR190", SubLocCode: "B1", BarCode: ""}]; var uniqArray = Array.from(new Map(test.map(e=>[e.id, e])).values()); console.log(uniqArray) 

使用lodash實用程序庫。 你可以做到這一點。 let result = _.uniqBy(test,'id');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM