Поиск объекта в массиве объектов возвращает ноль

У меня есть массив объектов и использую indexOf, чтобы найти конкретный объект в этом массиве.

Я переключился на онлайн-хранилище данных, и поскольку данные для выбранного объекта теперь возвращаются как переменные, я должен создать "фиктивный" объект, который затем используется для поиска соответствующего выбранного объекта в массиве.

Я сравнил фиктивный объект и объект в массиве, и они выглядят одинаково, но всегда возвращается ноль.

Это массив объектов:

data:
[ 
    Creative {
        id: '5631943370604544',
        gid: '5631943370604544',
        name: 'Hello',
        description: '',
        url: '',
        videos: [] 
    },
    Creative {
        id: '5653294995210240',
        gid: '5653294995210240',
        name: 'Yo',
        description: '',
        url: '',
        videos: []
    },
    Creative {
        id: '5745189578604544',
        gid: '5745189578604544',
        name: 'Sup',
        description: '',
        url: '',
        videos: [] 
    } 
]

Это фиктивный объект:

object:

Creative {
    id: '5653294995210240',
    gid: '5653294995210240',
    name: 'Yo',
    description: '',
    url: '',
    videos: [] 
}

Вот функция, которая используется для поиска. Это невозможно изменить, так как это часть GraphQL и Relay, и именно эта функция используется.

function cursorForObjectInConnection(data, object) {
  var offset = data.indexOf(object);
  if (offset === -1) {
    return null;
  }
  return offsetToCursor(offset);
}

2 ответа

indexOf() сравнивает searchElement с элементами массива, используя строгое равенство (тот же метод, который используется оператором === или тройным равенством).

от: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

Это очень важное правило, которое нужно знать в Javascript. Ваш фиктивный объект (даже если он выглядит идентично) отличается от объекта в этом массиве. Они существуют в двух разных местах в памяти вашего компьютера, поэтому при строгом сравнении на равенство, используемое indexOf, считает, что они не равны.

Это не относится к примитивным типам данных, таким как строки, числа или логические значения.

Почему вы не делаете свою собственную функцию поиска (поиск по идентификатору) и поиск объекта по идентификатору??!!

Другие вопросы по тегам