@KOPC1886

Как определить , существует ли в массиве элемент с таким ключом?

Всем привет!

Есть такой массив
var ar = [
            {
                id: 1,
                services: [
                    {
                        id: 12
                    },
                    {
                        id: 23
                    }
                ]
            },
            {
                id: 2,
                services: [
                    {
                        id: 12
                    },
                    {
                        id: 45
                    }
                ]
            }
        ];
var t= [];


Как сделать в цикле, чтобы при t.push(item) проверялось, что если такой элемент с id уже в массиве t есть, не добавлять его ?
Через indexOf не получилось.
  • Вопрос задан
  • 2372 просмотра
Решения вопроса 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Через indexOf не получилось.

Как-то не удивительно.

Можно воспользоваться функцией some (полифил прилагается в статье).

function insert_uniqe(collection, el) {
    if (!collection.some(function (current) {
        return current.id === el.id
    })) {
        collection.push(el);
    }
}
Ответ написан
Комментировать
В ES3 - только пройти по массиву циклом и проверить вхождение.
var has = false;
for(var i = 0; i < arr.length; i++)if(arr[i].id == val.id){
  has = true;
  break;
}
has || arr.push({
  id: val.id,
  label: val.name, 
})

Или в стиле ES5, функционально, с помощью some. ES6 добавляет методы find / findIndex, что упрощают поиск элемента в массиве.

А вообще - может проще вместо массива использовать объект с ключами - id?
Ответ написан
mlnkv
@mlnkv
JavaScript Developer
function insert_unique(collection, el) {
  if (!collection.filter(function(e) { return e.id == el.id }).length) return collection.push(el);
  return false;
}

insert_unique(ar, new_el);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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