[英]How to get unique values from object array
我有一個映射的數組對象,現在我需要從該數組的子級獲取唯一值。
const arr=[
{
name: 'name1',
functions:{
0:{
name:'some1',
property: 'string'
},
1:{
name:'some1',
property: 'string'
},
2:{
name:'some3',
property: 'number'
}
}
},
]
<div>
{
arr.map((item, index) => {
let ars=[]
//console.log(item.functions)
for(const key in item.functions){
if(ars.indexOf(item.functions[key])>1){
ars.push(item.functions[key])
}
}
console.log(ars)
return <div key={index}>
<h2>{item.name}</h2>
{
ars.map((i)=>(
<p>{i.name}</p>
))
}
</div>
})
}
</div>
我需要獲取這樣的值:some1 some3
因此,我只需要從屬性字符串中獲取一個名稱。 對於數字,只有一個名字。
您可以為property
創建一個Set
。 如果property
尚未添加,添加name
的屬性數組。
const arr = [{ name: 'name1', functions: { 0: { name: 'some1', property: 'string' }, 1: { name: 'some2', property: 'string' }, 2: { name: 'some3', property: 'number' } } }] const propertySet = new Set, names = [] for (const { functions } of arr) { Object.values(functions).forEach(o => { if (!propertySet.has(o.property)) { names.push(o.name); propertySet.add(o.property) } }) } console.log(names)
如果基於property
值的字符串表示形式的唯一性足夠,並且name
的值始終為true,則可以使用以下代碼:
const arr = [{name: 'name1', functions: {0: {name: 'some1', property: 'string'}, 1: {name: 'some2', property: 'string'}, 2: {name: 'some3', property: 'number'}}}]; let lookup = {}; arr.forEach(obj => { Object.values(obj.functions).forEach(func => { lookup[func.property] || (lookup[func.property] = func.name); }); }); console.log(Object.values(lookup));
注意:此解決方案將property: 123
和property: "123"
視為相同的值,因為使用了字符串表示形式。 如果以下為選項name: ""
, name: null
等,則使用第一個真實name
,如果不存在真實名稱,則使用最后一次出現的name
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.