首页 > 解决方案 > 查找数组的嵌套对象中是否存在键或值

问题描述

我有一组嵌套对象。

const data = [
  {
    audi: {
      model_Q3: 'Q3',
      model_A3: 'A3'
    }
  },
  {
    mercedes: {
      model_GLA: 'GLA',
      model_GLC: 'GLC'
    }
  }
];

如果嵌套对象的(audi、mercedes)键或值等于/包含参数,我希望函数返回 true。

function findCar(parameter) {
  let exists = false;
  data.forEach(cars => {
    Object.entries(cars).map(([_, carValues]) => {
        console.log(carValues)
    });
  }); 
}

findCar('model_Q3') //true;
findCar('model_') //true;
findCar('GLA') // true;
findCar('GL') // true;

谢谢。

标签: javascriptarraysobjectnested-object

解决方案


由于您使用的是简单对象,因此JSON.stringify方法在这里应该非常方便。它构造了一个 json 字符串,其中包含整个对象,因此也包含您在对象中拥有的所有键和值。使用该字符串,您可以通过正则表达式匹配提取每个键或值。

这可能是这样的:

function findCar(parameter) {
    const keysAndValues = JSON.stringify(data).match(/"([^"]+)"/g);
    for (let entry of keysAndValues) if (entry.includes(parameter)) return true;
    return false;
}

此处的正则表达式匹配以“开头的每个条目,然后仅匹配不是”且后跟“的字符。


推荐阅读