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

101
06 апреля 2021, 16:10

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

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

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

Answer 1

Самым быстрым способом будет создание объекта с ключами-name и доставать просто по ключу.

Если нужно достать именно из массива, то создать 2 массив со значениями name из первого в той же последовательности. После этого искать нужный индекс с помощью indexOf и по нему доставать нужный объект.

Но самым простым и читаемым вариантом(но более медленным по сравнению с предыдущими) будет filter. Он быстрее перебора массива с помощью for...in/for...of.

Answer 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);

Answer 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);

READ ALSO
Вопрос по DOM в JS

Вопрос по DOM в JS

У меня есть одна проблема с которой я очень часто сталкиваюсь при написании js кодаОбъясню на пример

106
На чистом js можно найти предка n-уровня?

На чистом js можно найти предка n-уровня?

Сейчас, чтобы найти нужного мне предка, я пишу elemparentElement

106
JQuery AJAX success не срабатывает

JQuery AJAX success не срабатывает

При клике отправляется объект на сервер, статус == 200, но success не срабатывает, вместо него работает error, что не так ?

96
Js RegExp Проверка на числа и некотрые символы

Js RegExp Проверка на числа и некотрые символы

Мне нужно вернуть true , если вводимое значение содержит любые цифры, а так же точку или запятую, или двоеточиеПробовал так, но работает некорректно:

117