簡體   English   中英

通過預定義的屬性名稱數組獲取對象屬性

[英]Get Object Properties By Predefined Property Names Array

我很確定以前曾回答過這種問題,但我無法很好地進行搜索。

我有一個像這樣的對象數組;

[
  { prop1:"foo1", prop2:"baz1", prop3:"bar1", prop4:"qux1"}
  { prop1:"foo2", prop2:"baz2", prop3:"bar2", prop4:"qux2"}
  { prop1:"foo3", prop2:"baz3", prop3:"bar3", prop4:"qux3"}
]

我有一個數組,用於存儲所需的屬性名稱,例如;

[ "prop1", "prop2" ]

因此,我需要使用另一個數組給定的屬性名稱來過濾數組中的所有對象。 和輸出將是這樣的;

[   
 { prop1:"foo1", prop2:"baz1" }   
 { prop1:"foo2", prop2:"baz2" }  
 { prop1:"foo3", prop2:"baz3" } 
]

我如何以適當的方式做到這一點?

您可以使用reduce方法創建pick函數,然后將其與map方法一起使用。

 const data = [{ prop1:"foo1", prop2:"baz1", prop3:"bar1", prop4:"qux1"},{ prop1:"foo2", prop2:"baz2", prop3:"bar2", prop4:"qux2"},{ prop1:"foo3", prop2:"baz3", prop3:"bar3", prop4:"qux3"}] const props = [ "prop1", "prop2" ] const pick = (o, p) => p.reduce((r, e) => Object.assign(r, {[e]: o[e]}), {}) const res = data.map(o => pick(o, props)); console.log(res) 

您可以使用map()reduce()

 const data = [ { prop1:"foo1", prop2:"baz1", prop3:"bar1", prop4:"qux1"}, { prop1:"foo2", prop2:"baz2", prop3:"bar2", prop4:"qux2"}, { prop1:"foo3", prop2:"baz3", prop3:"bar3", prop4:"qux3"} ]; const props = [ "prop1", "prop2" ]; const res = data.map(e => props.reduce((a,c) => (a[c] = e[c] , a), {})); console.log(res) 

您可以執行以下操作來達到目的:

 const data = [ { prop1:"foo1", prop2:"baz1", prop3:"bar1", prop4:"qux1"}, { prop1:"foo2", prop2:"baz2", prop3:"bar2", prop4:"qux2"}, { prop1:"foo3", prop2:"baz3", prop3:"bar3", prop4:"qux3"}, ] const keys = [ "prop1", "prop2" ] let result = data.map((record) => { let obj = {} keys.forEach((key) => { obj[key] = record[key] }) return obj }) console.log(result) 

 let arr = [ { prop1:"foo1", prop2:"baz1", prop3:"bar1", prop4:"qux1"}, { prop1:"foo2", prop2:"baz2", prop3:"bar2", prop4:"qux2"}, { prop1:"foo3", prop2:"baz3", prop3:"bar3", prop4:"qux3"} ] let filter = [ "prop1", "prop2" ]; let out = [...arr].map(e => Object.keys(e).map(k => !filter.includes(k) ? delete e[k] :true) && e); console.log(out) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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