Array.prototype.includes
выполняет проверку ссылочного равенства для объектов.
Это означает, что даже если вы нажимаете объекты одинаковой формы, они не являются одинаковыми ссылками, поскольку каждый запроссоздает новый объект.
Обычный шаблон - запоминать некоторую уникальную идентифицирующую часть объекта, например, идентификатор.
Может быть, вместо этого вы можете сохранить и проверить почтовый индекс?
if (!zipcodes.includes(el.codesPostaux[0])) {
zipcodes.push(el.codesPostaux[0]);
ville_arr.push([el.nom, el.codesPostaux[0]]);
}
Эффективным по времени методом является использование набора почтовых индексов вместо массива (поскольку установленное время поиска равно O (1)):
if (!zipcodesSet.has(el.codesPostaux[0])) {
zipcodesSet.add(el.codesPostaux[0]);
ville_arr.push([el.nom, el.codesPostaux[0]]);
}
Если вы решите использовать *Только 1016 *, тогда то, что вам нужно, можно также сделать, используя Array.prototype.every
(или Array.prototype.some
):
// this will return true if every place in ville_arr
// does not have the zipcode from the response
if (ville_arr.every(([, zipcode]) => zipcode !== el.codesPostaux[0])) {
ville_arr.push([el.nom, el.codesPostaux[0]]);
}
Вы также можете потенциально позвонить JSON.stringify
над вашим объектом, чтобы создать ту же строку из определенного объекта и сохранить ту, которая будет работать, потому что includes
выполняет сравнение на равенство для примитивных значений, таких как строки.