如何在JavaScript中获取对象数组内的目标对象属性名(如CODE_NOT_FOUND)
如何获取对象数组中特定动态属性的键名?
假设我们有这样一个对象数组:
var arrOfObjects = [{ "@attributes":{ "shuttle_id":"19939004", "date":"2021-08-30 14:04:00" }, "CODE_NOT_FOUND":{ "Code":"58182", "PosX":"56.6678", "PosY":"54.5086" } }, { "@attributes":{ "shuttle_id":"19939004", "date":"2021-08-30 14:02:00" }, "DECONNECTED_ERROR":{ } }]
我原本用下面的代码遍历数组,想获取子元素:
arrOfObjects.forEach(objOfObjects=> { for(var key in objOfObjects) { var value = objOfObjects[key]; console.log(value); } });
执行后得到的结果是属性值:
{ "shuttle_id":"19939004", "date":"2021-08-30 14:04:00" } { "LandmarkCode":"58182", "PosX":"56.6678", "PosY":"54.5086" }
但我实际需要拿到像CODE_NOT_FOUND、DECONNECTED_ERROR这类属性的键名,请问该怎么做?
解决方案
其实你离答案只差一步啦!你之前的代码只输出了属性值(value),但键名其实就在key变量里,只需要加个判断过滤掉不需要的@attributes键就行。
方法1:在for...in循环中过滤目标键
直接在循环里检查当前键是不是@attributes,不是的话就是你要的错误类型键名:
arrOfObjects.forEach(objOfObjects => { for(var key in objOfObjects) { if(key !== "@attributes") { console.log("错误类型键名:", key); // 如果需要同时获取对应的值,也可以一起输出 console.log("对应属性值:", objOfObjects[key]); } } });
方法2:用Object.keys()结合过滤
如果你更喜欢用数组方法,也可以先获取对象的所有键,再过滤掉@attributes:
arrOfObjects.forEach(obj => { // 获取所有键并过滤掉@attributes const errorTypeKeys = Object.keys(obj).filter(key => key !== "@attributes"); // 遍历输出每个目标键名(考虑到每个对象可能有多个?不过你的示例里每个对象只有一个) errorTypeKeys.forEach(key => { console.log(key); }); });
这两种方法都能帮你拿到CODE_NOT_FOUND、DECONNECTED_ERROR这类键名,根据你的习惯选就行啦~
内容的提问来源于stack exchange,提问作者MoTra
相关产品推荐
相关产品推荐

