Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Найти определенный объект в массиве объектов?

#javascript


У меня есть массив объектов. Их достаточно большое количество.
Объекты вида:

  {
     id: 123,
     name: 'г. Москва"
  }


Как мне быстро найти среди них объект (он гарантировано будет один), свойство name
которого совпадает с моим указанным (например, "г. Москва") и взять его id? Нужен самый
оптимальный и быстрый способ.
    


Ответы

Ответ 1



Самым быстрым способом будет создание объекта с ключами-name и доставать просто по ключу. Если нужно достать именно из массива, то создать 2 массив со значениями name из первого в той же последовательности. После этого искать нужный индекс с помощью indexOf и по нему доставать нужный объект. Но самым простым и читаемым вариантом(но более медленным по сравнению с предыдущими) будет filter. Он быстрее перебора массива с помощью for...in/for...of.

Ответ 2



Как оказалось, не все помнят про существование в ES6 метода find. :) let cities = [{ id: 121, name: 'г. Урюпинск' }, { id: 122, name: 'г. Париж' }, { id: 123, name: 'г. Москва' }, { id: 124, name: 'г. Штормград' }]; let searchTerm = 'г. Москва'; let cityId = cities.find(city => city.name === searchTerm).id console.log(cityId);

Ответ 3



Если ECMAScript - то через Array.filter: var data = [{ id: 123, name: "г. Москва" }, { id: 124, name: "г. Немосква" }]; var cutySearch = "г. Москва"; var cityId = data.filter(function(val) { return val.name == cutySearch; })[0].id; console.log(cityId); Либо вручную перебирать: var data = [{ id: 123, name: "г. Москва" }, { id: 124, name: "г. Немосква" }]; var cutySearch = "г. Москва"; var cityId; for(var i = 0; i < data.length; i++) { if(data[i].name == cutySearch) { cityId = data[i].id; break; } } console.log(cityId);

Комментариев нет:

Отправить комментарий