首页 > 解决方案 > 如何从对象数组中获取唯一值

问题描述

我有一个映射的数组对象,现在我需要从该数组的子对象中获取唯一值。

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

所以我只需要从属性字符串中获取一个名称。对于数字,只有一个名字。

标签: javascript

解决方案


你可以创建一个Setfor property。如果property尚未添加 a ,请将namefor 属性添加到数组中。

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)


推荐阅读