Как проверить, существует ли ключ в JSON Массив объектов - PullRequest
1 голос
/ 31 марта 2020

У меня есть массив JSON объектов, как показано ниже,

   let data = [
       {
          "node":[
             {
                "name":"aaaaa",
                "count":"2",
             }
          ]
       },
       {
          "client":[
             {
                "name":"bbbbb",
                "count":"2",
             }
          ]
       },
       {
          "ip_address":[
             {
                "name":"ccccc",
                "count":"3",
             }
          ]
       },
       {
          "compute":[
             {
                "name":"dddd",
                "count":"1",
             }
          ]
       }
    ]

let find_key = "ip_address";

Необходимо проверить, существует ключ root или нет (например, нужно найти, существует ли ip_address или не). без foreach пожалуйста.

JSFiddle Link: https://jsfiddle.net/b9gxhnko/

Пробовал следующие способы, но не повезло. Некоторая помощь будет оценена. Заранее спасибо. Пробовал как ниже, но не работает (всегда возвращает false),

    console.log(data[0].has(find_key)); // false
    console.log(data.has(find_key)); // false
    console.log(data[0].hasOwnProperty(find_key)); // false

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Вы можете попробовать с array.some():

let exists = data.some(x => x[find_key]);

  let data = [
       {
          "node":[
             {
                "name":"aaaaa",
                "count":"2",
             }
          ]
       },
       {
          "client":[
             {
                "name":"bbbbb",
                "count":"2",
             }
          ]
       },
       {
          "ip_address":[
             {
                "name":"ccccc",
                "count":"3",
             }
          ]
       },
       {
          "compute":[
             {
                "name":"dddd",
                "count":"1",
             }
          ]
       }
    ]

let find_key = "ip_address";

let exists = data.some(x => x[find_key]);
console.log(exists);
0 голосов
/ 31 марта 2020

У вас есть массив объектов, а _.has() и in ожидаются как один объект. Прямо сейчас вы проверяете, есть ли в массиве ключ с именем ip_address, которого у него нет. Используйте Array.some() или loda sh _.some() и проверьте, есть ли у каждого объекта ключ:

const data = [{"node":[{"name":"aaaaa","count":"2"}]},{"client":[{"name":"bbbbb","count":"2"}]},{"ip_address":[{"name":"ccccc","count":"3"}]},{"compute":[{"name":"dddd","count":"1"}]}]

// vanilla JS
const result1 = data.some(o => 'ip_address' in o)

console.log(result1)

// lodash
const result2 = _.some(data, o => _.has(o, 'ip_address'))

console.log(result1)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
...