Страницы

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

понедельник, 23 декабря 2019 г.

Выбор индекса объекта в коллекции

#javascript #коллекции #underscorejs


Каким образом эффективнее всего найти индекс объекта коллекции, который имеет указанное
свойство. Например, нужно найти индекс объекта коллекции, который имеет свойство id
равное 123.
Сейчас при помощи Underscore делаю так:

_.indexOf(collection, _.findWhere(collection, {id: 123}));


Подскажите, пожалуйста, более красивый и эффективный способ, если таковой имеется.
    


Ответы

Ответ 1



Как в Underscore, так и в Lodash есть метод _.findIndex, который собственно объединяет функционал _.index и _.findWhere и возвращает индекс элемента коллекции по условию: var collection = [{id: 321}, {id: 123}, {id: 333}]; _.findIndex(collection, {id: 123}); // 1 В дополнение есть метод findLastIndex, который ищет с конца коллекции (в Underscore и Lodash). Обновление: В Underscore эти методы появились только с версии 1.8 (в Lodash - с 1.1.0)

Ответ 2



С точки зрения функциональности, все отлично. С точки зрения скорости, Lodash работает быстрее Underscore. Вот пара тестов: Underscore (у меня около 60 мс): http://jsfiddle.net/IonDen/amcfve44/ Lodash (у меня около 40 мс): http://jsfiddle.net/IonDen/L5pbdgqs/ Код теста: var collection = [{id: 321}, {id: 123}, {id: 333}]; // warm up for (var i = 0; i < 100000; i++) { var test = _.indexOf(collection, _.findWhere(collection, {id: 123})); } console.time('indexOF: ') for (var i = 0; i < 100000; i++) { var test = _.indexOf(collection, _.findWhere(collection, {id: 123})); } console.timeEnd('indexOF: ')

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

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