簡體   English   中英

在 typescript 中的對象數組上展開運算符

[英]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都有samereference (例如 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);

您可以通過使用帶有mapfilterspread 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 )

使用擴展運算符map

 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.

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