如何使用展开运算符从对象数组中删除重复项
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: ""}
]
由此我想使用扩展运算符检索唯一对象,我尝试使用以下代码:
const uniKeys = [...(new Set(test.map(({ id }) => id)))];
我只能检索 ID,如何使用扩展运算符检索唯一对象。此外,任何新的 ES6 功能实现都会有所帮助。
使用 lodash 实用程序库。你可以做到这一点。
让结果 = _.uniqBy(测试, 'id');
您可以通过 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()
])
您可以使用 find
方法 map
返回对象数组,这将 return 第一个具有该 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)
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)
您可以使用 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 作为唯一键":
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: ""}
]
由此我想使用扩展运算符检索唯一对象,我尝试使用以下代码:
const uniKeys = [...(new Set(test.map(({ id }) => id)))];
我只能检索 ID,如何使用扩展运算符检索唯一对象。此外,任何新的 ES6 功能实现都会有所帮助。
使用 lodash 实用程序库。你可以做到这一点。 让结果 = _.uniqBy(测试, 'id');
您可以通过 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()
])
您可以使用 find
方法 map
返回对象数组,这将 return 第一个具有该 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)
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)
您可以使用 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; }