Как я могу проверить, содержит ли объект определенный ключ? - PullRequest
0 голосов
/ 25 февраля 2019

Это мой объект data:

[{id:1, name:"Cat", category:{id:2, name:"Animals"}}]

Я хочу проверить, содержит ли он ключ category.

Это мой подход:

if (data.hasOwnProperty("category")) {
console.log("data contains category");
}else {
  console.log("data does not contain category");
}

Вывод:

данные не содержат категорию

Должно быть наоборот ...

Ответы [ 4 ]

0 голосов
/ 25 февраля 2019

Это массив только с одним индексом, поэтому вы можете сделать это, используя оператор in:

"category" in data[0] // That checks if the property "category" exists.

Если у вас более одного индекса, вы должны зациклить этот массив.

Оператор in также проверяет наличие унаследованных свойств.

let data = [{id:1, name:"Cat", category:{id:2, name:"Animals"}}];
data.forEach((o, i) => console.log("Index:", i, " - Has category?:", "category" in o));
0 голосов
/ 25 февраля 2019

Вы также можете использовать some, чтобы проверить, соответствует ли какой-либо объект в вашем массиве определенному условию:

var data = [{
  id: 1,
  name: "Cat",
  category: {
    id: 2,
    name: "Animals"
  }
}];

var hasCategory = data.some(k => k.hasOwnProperty('category'));

if (hasCategory) {
  console.log("data contains category");
} else {
  console.log("data does not contain category");
}
0 голосов
/ 25 февраля 2019

Вам нужно перебрать элементы массива.и вы можете деструктурировать присвоение

let arr = [{id:1, name:"Cat", category:{id:2, name:"Animals"}}]

arr.forEach(({category})=>{
  if (category !== undefined) {
   console.log("data contains category");
  }else {
   console.log("data does not contain category");
  }
})
0 голосов
/ 25 февраля 2019

Вам нужно перебрать ваш массив.Таким образом, вы можете поместить код внутри forEach

let k = [{
  id: 1,
  name: "Cat",
  category: {
    id: 2,
    name: "Animals"
  }
}]

k.forEach(function(data) {
  if (data.hasOwnProperty("category")) {
    console.log("data contains category");
  } else {
    console.log("data does not contain category");
  }
})

Если вы не предпочитаете выполнять итерацию, вам нужно передать индекс, поскольку данные - это массив объектов.

let data = [{
  id: 1,
  name: "Cat",
  category: {
    id: 2,
    name: "Animals"
  }
}]


if (data[0].hasOwnProperty("category")) {
  console.log("data contains category");
} else {
  console.log("data does not contain category");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...