Дополнительно
Поиск объекта по id в массиве объектов JavaScript
У меня есть массив:
myArray = [{'id':'73','foo':'bar'},{'id':'45','foo':'bar'}, etc.]
Я'не могу изменить структуру массива. Мне передается id 45
, и я хочу получить 'bar'
для этого объекта в массиве.
Как это сделать на JavaScript или с помощью jQuery?
1420
20
Поскольку вы уже используете jQuery, вы можете использовать функцию grep, которая предназначена для поиска в массиве:
Результатом будет массив с найденными элементами. Если вы знаете, что объект всегда находится там и встречается только один раз, вы можете просто использовать
result[0].foo
для получения значения. В противном случае следует проверить длину полученного массива. Пример:Используйте метод
find()
:Из MDN:
Если вы хотите найти его индекс, используйте
findIndex()
:Из MDN:
Если вы хотите получить массив совпадающих элементов, используйте вместо этого метод
filter()
:Это вернет массив объектов. Если вы хотите получить массив свойств
foo
, вы можете сделать это с помощью методаmap()
:Примечание: такие методы, как
find()
илиfilter()
, и стрелочные функции не поддерживаются старыми браузерами (например, IE), поэтому если вы хотите поддерживать эти браузеры, вам следует транспонировать ваш код, используя Babel (с polyfill).Другим решением является создание объекта поиска:
Это особенно интересно, если вам нужно выполнить много поисков.
Это не потребует большего объема памяти, поскольку идентификаторы и объекты будут общими.
В ECMAScript 2015 обеспечивает найти() Метод с массивами:
в
в
Он работает без внешних библиотек. Но если вы хотите старше поддержка браузеров Вы можете включить эту полифилл.
Underscore.js есть хороший способ для этого:
Я думаю, что самым простым способом будет следующий, но он не будет работать на Internet Explorer 8 (или более ранней версии):
Попробуйте следующее
Универсальный и более гибкий вариант выше функция findbyid осуществляет:
Вы можете сделать это легко с помощью карты()]1 функция:
Рабочий пример: http://jsfiddle.net/hunter/Pxaua/
Вы можете использовать фильтры,
В то время как есть много правильных ответов, многие из них не учитывают тот факт, что это дорогостоящая операция, т. к если делать не один раз. В крайнем случае это может быть причиной реальных проблем с производительностью.
В реальном мире, если вы обрабатываете много предметов и производительность это'ы гораздо быстрее создавать подстановки:
тогда вы можете сделать на вещи в определенное время, как это :
Вы могли бы также рассмотреть использование карты вместо объекта в качестве подстановки: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Map
Используя родной
Array.reduce
в
возвращает элемент объекта, если найден, в противном случае значение false
Если вы сделаете это несколько раз, вы можете создать карту (ЕС6):
Затем вы можете просто сделать:
Здесь's, как я'd и это на чистом JavaScript, в самые минимальные способом я могу думать, что работает в ECMAScript 3 или более поздней версии. Он возвращается, как только найдено совпадение.
Более общим и короткое
в вашем случае экс.
элемент ВАР = findFromArray(с myarray,'ид',45)
, что даст вам всего элемента.Опираясь на принятый ответ:
в jQuery:
Или В CoffeeScript:
Вы можете попробовать Sugarjs от http://sugarjs.com/.
Она имеет очень сладкий способ на массивы
.найти
. Поэтому вы можете найти такой элемент:Вы можете также передать объект с несколькими свойствами для того, чтобы добавить еще один "предложениях Where и".
Обратите внимание, что Sugarjs расширяет собственные объекты, и некоторые люди считают это очень зло...
Пока браузер поддерживает ЕСМА-262, 5-е издание (декабрь 2009 г.), Это должно работать, практически один-лайнер:
Вы можете сделать это даже на чистом JavaScript, с помощью встроенного на "фильтр" и функции для массивов:
Так что теперь просто перейдет на "ИД" в место
ключ
и "45" в местозначение
, и вы получите полное соответствие объекта идентификационный номер 45. Так что будет,