Проверьте, содержит ли массив объектов определенный ключ - PullRequest
3 голосов
/ 28 апреля 2020

Мне нужно определить, существует ли определенный ключ в массиве объектов.

Вот пример массива:

arrOfObj = [{
        "mainKey1": {
            "subKey1": {
                "innerKey1": {
                    "innerMostKey1": {
                        "key1": "value"
                    }
                }
            }
        }
    }, {
        "mainKey2": {
            "key2": "value"
        }
    }, {
        "mainKey3": {
            "subKey3": {
                "key3": "value"
            }
        }
    }
]

Я пытался сделать это, но я ошибся вывод:

const objKeys = Object.keys(arrOfObj)
console.log('objKeys = ' + JSON.stringify(arrOfObj))

Вывод - номера индекса:

objKeys = ["0", "1", "2"]

Я хочу иметь функцию, которая работает следующим образом:

var isKeyPresent = checkKeyPresenceInArray('mainKey3')

Обратите внимание, что Мне нужно только проверить самый верхний уровень в объектах - в приведенном выше примере это основные ключи (mainKey1, et c) и их содержимое является динамическим c (некоторые другие имеют глубоко вложенный объект внутри, а некоторые не так.

Помогите!

Ответы [ 5 ]

4 голосов
/ 28 апреля 2020

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

let checkKeyPresenceInArray = key => arrOfObj.some(obj => Object.keys(obj).includes(key));

let arrOfObj = [{
        "mainKey1": {
            "subKey1": {
                "innerKey1": {
                    "innerMostKey1": {
                        "key1": "value"
                    }
                }
            }
        }
    }, {
        "mainKey2": {
            "key2": "value"
        }
    }, {
        "mainKey3": {
            "subKey3": {
                "key3": "value"
            }
        }
    }
]

let checkKeyPresenceInArray = key => arrOfObj.some(obj => Object.keys(obj).includes(key));


var isKeyPresent = checkKeyPresenceInArray('mainKey3')

console.log(isKeyPresent);
0 голосов
/ 02 мая 2020

Вы должны использовать метод hasOwnProperty, чтобы проверить, доступен ли ключ в объектах в этом массиве -

var c = 0;
arrOfObj.forEach(e => {
  if(e.hasOwnProperty("mainKey1")){
       c++;
   }
});
if(c > 0 && c == arrOfObj.length){
    console.log("The key is found in all the objects in the array.");
}
else if(c == 0){
    console.log("The key is not found in any objects in the array");
}
else{
     console.log("The key is  found in some objects in the array");
}
0 голосов
/ 02 мая 2020

Вы можете использовать some с hasOwnProperty следующим образом:

let checkKeyPresenceInArray = (key) => arrOfObj.some((o) => o.hasOwnProperty(key));
0 голосов
/ 01 мая 2020

это будет работать, возвращает логическое значение:

arrOfObj.hasOwnProperty('mainKey3');
0 голосов
/ 28 апреля 2020

Вы можете перебирать массив, проверять и видеть, есть ли у какого-либо объекта ключ, который вы ищете, и возвращать true, если он есть. Если вы не найдете ключ, то for l oop завершится и вернет false.

arrOfObj = [{
        "mainKey1": {
            "subKey1": {
                "innerKey1": {
                    "innerMostKey1": {
                        "key1": "value"
                    }
                }
            }
        }
    }, {
        "mainKey2": {
            "key2": "value"
        }
    }, {
        "mainKey3": {
            "subKey3": {
                "key3": "value"
            }
        }
    }
]

function arrayHasKey(arr, key) {
  for (const obj of arr) {
    if (key in obj) { return true; }
  }
  return false;
}

console.log(arrayHasKey(arrOfObj, "mainKey2"))
console.log(arrayHasKey(arrOfObj, "mainKey10"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...