簡體   English   中英

如何從對象數組獲取唯一值

[英]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: 123property: "123"視為相同的值,因為使用了字符串表示形式。 如果以下為選項name: ""name: null等,則使用第一個真實name ,如果不存在真實名稱,則使用最后一次出現的name代替。

暫無
暫無

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

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