#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);
Комментариев нет:
Отправить комментарий