paulfcdd
@paulfcdd
PHP/Sf/WEB developer

Как проверить, есть ли объект в массиве?

Есть три объекта с координатами:
1) {lat: 52.289591, lng: 21.030541}
2) {lat: 52.289591, lng: 21.030541}
3) {lat: 51.09464, lng: 17.019549}

и есть так же массив markersArray, который нужно заполнить этими объектами, но без дубликатов, то есть, чтобы по итогу итерации массив содержал в себе только 2 элемента:
0: {lat: 52.289591, lng: 21.030541}
1: {lat: 51.09464, lng: 17.019549}


Каким образом я бы мог проверять, присутствует ли данный объект в массиве и если да, то не пушить его в массив?
  • Вопрос задан
  • 1169 просмотров
Решения вопроса 4
0xD34F
@0xD34F Куратор тега JavaScript
const uniq = [];
data.forEach(n => {
  if (uniq.every(m => m.lat !== n.lat || m.lng !== n.lng)) {
    uniq.push(n);
  }
});

или

const uniq = data.filter((n, i, arr) => n === arr.find(m => m.lat === n.lat && m.lng === n.lng));

или

const uniq = Object.values(data.reduce((acc, n) => (acc[`${n.lat},${n.lng}`] = n, acc), {}));
Ответ написан
@ned4ded
Верстка, Фронтенд
const arr = [
  {lat: 52.289591, lng: 21.030541},
  {lat: 52.289591, lng: 21.030541},
  {lat: 51.09464, lng: 17.019549},
];

const uniq = arr.filter(
  (el, i, array) => !array
    .slice(0, i)
    .find(({lat, lng}) => lat === el.lat && lng === el.lng)
);


https://repl.it/@ned4ded/ElementaryVeneratedTelevision
Ответ написан
Комментировать
coderisimo
@coderisimo Куратор тега JavaScript
мне кажется тут задачка в 3 строчки)))

function addNew(arr, newObj) {
  if (!($.grep(arr, function(n, i) { return n.lat == newObj.lat && n.lng == newObj.lng; })).length)
   arr.push(newObj);
}
Ответ написан
Комментировать
@deliro
Агрессивное программирование
Чёт какие-то нефункциональные, некрасивые и негибкие у вас подходы, господа)

1. Грузишь lodash (кому очень жалко килобайты — из него можно использовать только нужные функции)
2. _.uniqWith(x, _.isEqual); где x — массив твоих объектов с координатами

https://codepen.io/anon/pen/yEJQXM
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы