Javascript 使用regex访问对象';s场

Javascript 使用regex访问对象';s场,javascript,dictionary,Javascript,Dictionary,我所处的情况是,我可能需要处理一个JSON,它可能包含不同的键名,我需要通过正则表达式访问这些键名 为简单起见,我可以收到类似以下内容的列表: x=[{ bus: "XYZ123", color:"red" }, { minibus: "ZZZ999", color:"blue" } ] 我需要一个函数,可以在map函数中得到XYZ123和ZZZ999 我尝试了x.map(e=>e[/.*bus/]

我所处的情况是,我可能需要处理一个JSON,它可能包含不同的键名,我需要通过正则表达式访问这些键名

为简单起见,我可以收到类似以下内容的列表:

x=[{  bus: "XYZ123", color:"red"   },
  {  minibus: "ZZZ999", color:"blue"   } ]
我需要一个函数,可以在map函数中得到XYZ123和ZZZ999

我尝试了
x.map(e=>e[/.*bus/])
但没有成功,返回
[未定义,未定义]

有没有人有什么我可以学的窍门

谢谢

var x=[{
总线:“XYZ123”,
颜色:“红色”
},
{
小巴:“ZZ999”,
颜色:“蓝色”
}
];
console.log(
x、 map(it=>it[Object.keys(it.find)(key=>key.endsWith('bus'))]))

);您可以使用用于。。。在循环中,通过匹配正则表达式在对象上查找属性名称

const regex = /.*bus/;

const result = x.map((e) => {
  for (var key in e) {
    if (key.match(regex)) {
      return e[key];
    }
  }
  return undefined;
});

console.log(result);

映射返回映射。。。一对一。所以,若数组中的某些数据不满足条件,那个么在数组中的这个索引上返回一个未定义的值。如果你的数组有100个元素,并且只有5个元素满足你的条件,那么一个映射将返回100个元素,在95种情况下,你将得到未定义的元素。您应该使用过滤器,如果您需要阵列的新副本,您可以创建它

const x=[{bus:“XYZ123”,颜色:“red”},
{小巴:“ZZ999”,颜色:“蓝色”},
{motobicke:“ZZ999”,颜色:“黑色”}]
常量过滤器比=(数据,正则表达式)=>{
返回Array.from(data).filter(item=>Object.keys(item).some(key=>regex.test(key)))
}

log(filterBy(x,/bus/)我们谈论的“变化”程度如何?如果它是一个有限列表,你可以只查找其中的任何一个。当你第一次尝试时,你得到了什么?它的变化足够大,无法设置有限列表,然后首先我会问为什么会这样。其次,如果这是唯一的动态键,您可以查找任何键,不包括
color
键。您期望的输出是什么?