Я хочу проверить, существует ли data.objectId в массиве msgArr. Для этого я запускаю код ниже:

var exists = msgArr.objectId.includes(data.objectId);

if(exists === false){
   msgArr.push({"objectId":data.objectId,"latLont":data.latLont,"isOnline":data.isOnline});
}

Массив выглядит следующим образом:

var msgArr = [
  {isOnline:true,latLont:"123",objectId:"on0V04v0Y9"},
  {isOnline:true,latLont:"1",objectId:"FpWBmpo0RY"},
  {isOnline:true,latLont:"48343",objectId:"Qt6CRXQuqE"} 
 ]

Я получаю ошибку ниже:

Невозможно прочитать свойство «включает» неопределенного

8
Folky.H 6 Янв 2017 в 21:02

3 ответа

Лучший ответ

Как говорится в комментариях: объект массива javascript не имеет свойства objectId.
Глядя на объекты в этом массиве, становится ясно, что они есть, поэтому чтобы проверить, существует ли определенный элемент, вы можете сделать это, используя Array.prototype.some:

var exists = msgArr.some(o => o.objectId === data.objectId);
12
Nitzan Tomer 6 Янв 2017 в 18:15

Прежде всего, Дэйв Ньютон прав. Массив не имеет objectId!

Может быть, ваш «массив» не является реальным массивом. Может быть, это объект, который содержит массив ... я не знаю ... но в этом случае вам придется кодировать что-то вроде этого:

var exist = msArr["objectId"] !== undefined

Чем «exist», который является логическим значением, содержит информацию, если «msArr» имеет свойство / поле с именем «objectId»

-1
Enis B 6 Янв 2017 в 18:15

Он говорит вам, что вы пытаетесь получить доступ к свойству неопределенного объекта. Объект msgArr вообще не имеет свойства objectID, что означает, что он неопределен . Поскольку этого не существует, у него нет возможности иметь свойство includes любого типа.

Вам нужно получить доступ к объекту в массиве, а не к самому массиву. Нечто подобное msgArr[0].objectID будет ссылаться на экземпляр объекта. Вы можете даже использовать функции массива, чтобы проверить, существует ли что-то на основе его objectID с функцией фильтра.

1
gelliott181 6 Янв 2017 в 18:14