如何检查JSON数组对象是否包含密钥

时间:2019-08-27 13:15:58

标签: javascript arrays node.js json

{
  "myJSONArrayObject": [
    {
      "12": {}
    },
    {
      "22": {}
    }
  ]
}  

我有上面的JSON Array对象。如何检查 myJSONArrayObject 是否具有特定密钥?

此方法无效:

let myIntegerKey = 12;

if (myJSONArrayObject.hasOwnProperty(myIntegerKey))
      continue;

当它包含一个键时,它似乎返回false;而当它不包含键时,它返回true。

4 个答案:

答案 0 :(得分:3)

myJSONArrayObject是一个数组。它没有12作为属性(除非数组中有12个以上的项目)

因此,检查数组中的some个对象是否具有myIntegerKey作为属性

const exists = data.myJSONArrayObject.some(o => myIntegerKey in o)

或者如果myIntegerKey始终是自己属性

const exists = data.myJSONArrayObject.some(o => o.hasOwnProperty(myIntegerKey))

这是一个片段:

const data={myJSONArrayObject:[{"12":{}},{"22":{}}]},
      myIntegerKey = 12,
      exists = data.myJSONArrayObject.some(o => myIntegerKey in o);

console.log(exists)

答案 1 :(得分:0)

"myJSONArrayObject"是一个数组,因此您必须检查hasOwnProperty的每个元素:

let myIntegerKey = 12;

for (var obj in myJSONArrayObject) {
  console.log(obj.hasOwnProperty(myIntegerKey));
}

答案 2 :(得分:0)

const obj = {
  myJSONArrayObject: [
    {
      12: {},
    },
    {
      22: {},
    },
  ],
};

const myIntegerKey = '12';
const isExist = obj.myJSONArrayObject.findIndex((f) => { return f[myIntegerKey]; }) > -1;
console.log(isExist); 

您可以使用every()使其更快

const obj = {
  myJSONArrayObject: [
    {
      22: {},
    },
    {
      12: {},
    },
  ],
};

const myIntegerKey = '12';

const isExist = !obj.myJSONArrayObject
  .every((f) => {
    return !f[myIntegerKey];
  });
console.log(isExist); 

  

注意:此处的键名(12: {},)不依赖于typeof myIntegerKey12'12'都将返回{{ 1}}。

答案 3 :(得分:0)

通过键检索对象的最直接方法是使用JavaScript bracket notation。同样,也使用find方法遍历数组。

const obj = {
  myJSONArrayObject: [{
      12: {},
    },
    {
      22: {},
    },
  ],
};

const myIntegerKey = 12;
const myObject = obj.myJSONArrayObject.find(item => item[myIntegerKey]);
console.log("exists", myObject !== undefined);