tra*_*cer 8 javascript ecmascript-6 typescript2.0 angular
我有下面的对象数组,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: ""}
]
Run Code Online (Sandbox Code Playgroud)
从这里我想使用spread运算符检索唯一对象,我尝试使用下面的代码:
const uniKeys = [...(new Set(test.map(({ id }) => id)))];
Run Code Online (Sandbox Code Playgroud)
我只能检索id,如何使用spread运算符检索唯一对象.此外,任何新的ES6功能实现都会有所帮助.
您可以map
使用find
方法返回对象数组,这将返回具有该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)
Run Code Online (Sandbox Code Playgroud)
您也可以改用filter
method。
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)
Run Code Online (Sandbox Code Playgroud)
您可以使用 aSet
并按 unknown 进行过滤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);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1704 次 |
最近记录: |