[英]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.