Это мой объект data:
[{id:1, name:"Cat", category:{id:2, name:"Animals"}}]
Я хочу проверить, содержит ли он ключ category.
Это мой подход:
if (data.hasOwnProperty("category")) {
console.info("data contains category");
}else {
console.info("data does not contain category");
}
Результат:
data does not contain category
Должно быть наоборот...
@Девон. Это должен быть объект, потому что если я alert(data.toString()); выведу: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Он имеет [ ] вокруг объекта; это массив с одним объектом в нем.
@Ярла, это, наверное, не самый простой способ увидеть данные, использовать консоль, а не оповещения. Помимо этого, у вас есть массив из нескольких объектов, судя по всему, а не один объект. Я думаю, проблема в том, что вы ожидаете один объект, когда у вас есть массив объектов. Ошибается ли производитель или ожидания потребителя, решать вам.
@Devon Спасибо, меня всегда смущает этот вопрос ... это объект или массив



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно повторить свой массив. Таким образом, вы можете поместить код внутри forEach
let k = [{
id: 1,
name: "Cat",
category: {
id: 2,
name: "Animals"
}
}]
k.forEach(function(data) {
if (data.hasOwnProperty("category")) {
console.info("data contains category");
} else {
console.info("data does not contain category");
}
})Если вы не предпочитаете итерацию, вам нужно передать индекс, поскольку данные представляют собой массив объектов.
let data = [{
id: 1,
name: "Cat",
category: {
id: 2,
name: "Animals"
}
}]
if (data[0].hasOwnProperty("category")) {
console.info("data contains category");
} else {
console.info("data does not contain category");
}Вы также можете использовать some, чтобы проверить, соответствует ли какой-либо объект в вашем массиве определенному условию:
var data = [{
id: 1,
name: "Cat",
category: {
id: 2,
name: "Animals"
}
}];
var hasCategory = data.some(k => k.hasOwnProperty('category'));
if (hasCategory) {
console.info("data contains category");
} else {
console.info("data does not contain category");
}Вам нужно перебирать элементы массива. и вы можете присвоение деструктуризации
let arr = [{id:1, name:"Cat", category:{id:2, name:"Animals"}}]
arr.forEach(({category})=>{
if (category !== undefined) {
console.info("data contains category");
}else {
console.info("data does not contain category");
}
})Просто примечание: если category определен как null, 0 или любое другое ложное значение, ваш текущий код будет отображаться: данные не содержат категорию. Возможно, вы можете улучшить его, изменив условие проверки на category !== undefined.
@CodeManiac Добро пожаловать. Я надеюсь, что ваш голос против будет отменен, я не хотел, чтобы вы проголосовали против, извините за это.
@Shidersz, нет проблем, приятель :) голосование против меня не беспокоит. единственный мотив - обучение.
Это массив только с одним индексом, поэтому вы можете сделать это с помощью оператора 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.info("Index:", i, " - Has category?:", "category" in o));
У вас есть массив, а не объект. Если у вас должен быть объект, вы должны смотреть на источник
data.