[英]Spread operator over an array of objects in typescript
我正在尝试使用spread operator
来找到一个唯一的集合
let obj = { requests: [{ id: 'p1', isOptional: false, item: [Object] }, { id: 'p1', isOptional: false, item: [Object] } ] }; // I tried below. let output = [...new Set(obj.requests)]; console.log(output);
但这没有用。
您可以从此处如何从 JavaScript 中的对象数组中获取不同的值? . 下面是解释为什么它没有像你预期的那样工作。
除非object
具有same
的引用,否则您无法使用Set
找到unique
objects
。 因此,在您的情况下,您似乎对数组中的两个objects
都有两个不同的references
。 因此Set
将返回2
values
。
如果您对两个objects
都有same
的reference
(例如 let o = {id: 'p1',isOptional: false,item: [Object]})并且 let obj = {requests: [o,o]}那么它将返回唯一值。
您可以在Set
中进行验证,如下图所示。
考虑下面的示例。
let o = { id: 'p1', isOptional: false, item: { id: 10 } }; let obj = { requests: [o, o] } let output = [...new Set(obj.requests)]; console.log('Output with unique reference'); console.log(output); let o2 = { id: 'p1', isOptional: false, item: { id: 10 } }; let obj2 = { requests: [o, o2] } let output2 = [...new Set(obj2.requests)]; console.log('Output with different references'); console.log(output2);
您可以通过使用带有map
的filter
或spread Operator
来执行此操作。 仅使用带有new Set
的扩展运算符不会产生预期的结果。
使用过滤器
var data = { requests: [{ id: 'p1', isOptional: false, item: [Object] }, { id: 'p1', isOptional: false, item: [Object] } ] } var unique = data.requests.filter(function({id}) { return,this[id] && (this[id] = id) }. {}) console.log(unique )
var data = { requests: [{ id: 'p1', isOptional: false, item: [Object] }, { id: 'p1', isOptional: false, item: [Object] } ] } var unique = [...new Set(data.requests.map(({id}) => id))].map(e => data.requests.find(({id}) => id == e)); console.log(unique )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.