【问题标题】:find object key in nested array object在嵌套数组对象中查找对象键
【发布时间】:2019-01-09 10:58:43
【问题描述】:

我有一个对象我会在VOYAGES 中得到region=AAA{FIABILITE:XXX,RECTIVITE:YYY}(或其他)(我不需要在ICC 中搜索)

这是我尝试获取数据的方式

const activityName = 'VOYAGES' // activityName: VOYAGES Or ICC
const  queryParams = [',','region=AAA']
const objectifs = {
  'VOYAGES': [
    {
      'region=AAA': {
        FIABILITE: '75',
        REACTIVITE: '90'
      }
    },
    {
      'region=BBBB': {
        FIABILITE: '75',
        REACTIVITE: '86'
      }
    }
  ],
  'ICC': [
    {
      'region=CSIC': {
        FIABILITE: '45',
        REACTIVITE: '80'
      }
    }
  ]
}


const objKeys = Object.values(objectifs[activityName])
const index = objKeys.indexOf((queryParams[1]));
const data = objectifs[activityName][index]; 
console.log(data)

实际上data 是未定义的。

例如,我想得到region=AAA 中的{FIABILITE:XXX,RECTIVITE:YYY}

【问题讨论】:

  • 你到底想要什么?
  • 你如何定义你想要的区域?通过用户输入、硬编码或如何输入?
  • 是的,它是用户输入,所以动态
  • 我不太明白,你期望什么输出?你需要什么?到底出了什么问题?

标签: javascript object indexof


【解决方案1】:

这是因为你的对象是如何创建的,所以你没有定义,你需要添加一个索引objectifs['VOYAGES'][0]['region=AAA']

objectifs = {
  'VOYAGES': [{
      'region=AAA': {
        FIABILITE: '75',
        REACTIVITE: '90'
      }
    },
    {
      'region=BBBB': {
        FIABILITE: '75',
        REACTIVITE: '86'
      }
    }
  ],
  'ICC': [{
    'region=CSIC': {
      FIABILITE: '45',
      REACTIVITE: '80'
    }
  }]
}
var data = {}

objectifs['VOYAGES'].forEach(function(element) {
  if ('region=AAA' in element) {
    data = element['region=AAA'];
  }
});

console.log(data)

【讨论】:

  • 你硬编码了索引0我会动态找到它
【解决方案2】:

您可以使用以下方法在具有特定属性的对象数组中找到index

const index = objectifs[activityName].findIndex(x => !!x[queryParams[1]])

工作示例:

const activityName = 'VOYAGES' // activityName: VOYAGES Or ICC
const  queryParams = [',','region=AAA']
const objectifs = {
  'VOYAGES': [
    {
      'region=AAA': {
        FIABILITE: '75',
        REACTIVITE: '90'
      }
    },
    {
      'region=BBBB': {
        FIABILITE: '75',
        REACTIVITE: '86'
      }
    }
  ],
  'ICC': [
    {
      'region=CSIC': {
        FIABILITE: '45',
        REACTIVITE: '80'
      }
    }
  ]
}

const index = objectifs[activityName].findIndex(x => x.hasOwnProperty([queryParams[1]]));

const data = objectifs[activityName][index]; 
console.log(data)

const obj = data[queryParams[1]];
console.log(obj)

【讨论】:

    【解决方案3】:

    你可以试试:

    const queryParams = [',','region=AAA']
    const activityName = 'VOYAGES' 
    const searchKey = queryParams[1];
    
    objectif={'VOYAGES': [
        {
            'region=AAA': {
                FIABILITE: '75',
                REACTIVITE: '90'
            }
        },
        {
            'region=BBBB': {
                FIABILITE: '75',
                REACTIVITE: '86'
            }
        }
    ],
    'ICC': [
        {
            'region=CSIC': {
                FIABILITE: '45',
                REACTIVITE: '80'
            }
        }
    ]};
    
    let resultData = objectif[activityName].find((entry) => {
      return entry[searchKey];
    })[searchKey];
    
    console.log("Result data: ", resultData);

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 1970-01-01
      • 2021-10-04
      • 2023-03-26
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      相关资源
      最近更新 更多