У меня есть массив объектов. Их достаточно большое количество.
Объекты вида:
{
id: 123,
name: 'г. Москва"
}
Как мне быстро найти среди них объект (он гарантировано будет один), свойство name
которого совпадает с моим указанным (например, "г. Москва") и взять его id
? Нужен самый оптимальный и быстрый способ.
Самым быстрым способом будет создание объекта с ключами-name и доставать просто по ключу.
Если нужно достать именно из массива, то создать 2 массив со значениями name из первого в той же последовательности. После этого искать нужный индекс с помощью indexOf
и по нему доставать нужный объект.
Но самым простым и читаемым вариантом(но более медленным по сравнению с предыдущими) будет filter
. Он быстрее перебора массива с помощью for...in
/for...of
.
Как оказалось, не все помнят про существование в 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);
Если 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);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть одна проблема с которой я очень часто сталкиваюсь при написании js кодаОбъясню на пример
Сейчас, чтобы найти нужного мне предка, я пишу elemparentElement
При клике отправляется объект на сервер, статус == 200, но success не срабатывает, вместо него работает error, что не так ?
Мне нужно вернуть true , если вводимое значение содержит любые цифры, а так же точку или запятую, или двоеточиеПробовал так, но работает некорректно: