#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
У меня есть материнский объект, заполненный объектами, которые выглядят следующим образом:
profiles[ slug ] = {
slug : slug,
url : url,
el : $('#' el),
position : this.el.position().left
};
Я хочу иметь возможность ссылаться на объект в этом массиве по его position
свойству. Есть ли какой-нибудь быстрый способ сделать это, за исключением перебора всех из них и сравнения значения каждого объекта с тем, что я ищу?
Комментарии:
1. ссылаться на объект по его позиции не очень хорошая идея, что, если более 1 объекта имеют одинаковую / дублированную позицию? Также обратите внимание, что ссылка на объект должна основываться на некотором идентификаторе (идентификаторе), который обязательно уникален. Если вы не имеете в виду поиск объектов на основе
position
свойства.2. К счастью, в этом случае гарантируется, что объекты, которые я ищу, имеют разные позиции
3.
this.el.position().left
Предназначен для ссылки наel
свойство объекта, который вы создаете? Если да, то это не сработает.
Ответ №1:
Underscore.js имеет множество утилит, которые помогают с такими типами поиска: http://underscorejs.org/#findWhere
Пример кода:
var result = _.findWhere(profiles, {position: SEARCH_VALUE});
Комментарии:
1. Это действительно круто, мне придется взглянуть на underscore JS
Ответ №2:
Есть ли какой-нибудь быстрый способ сделать это, за исключением перебора всех из них
Да: вы можете создавать / поддерживать вторичный индекс, где ключом является position
значение, а значением является объект.
index = {};
for (slug in profile) {
if (profile.hasOwnProperty(slug)) {
index[profile[slug].position] = profile[slug];
}
}
Комментарии:
1. Хммм, мне просто интересно, есть ли какой-то сумасшедший непонятный метод jQuery / JS, позволяющий просто выбрать его напрямую, используя значение свойства — нет такой вещи?
2. Нет, конечно, нет. Для выполнения этого за O (1) раз требуется дополнительный индекс, и среда выполнения, конечно, не сделает это автоматически для вас.
3. Справедливо, спасибо! Я буду использовать этот метод, если больше ничего не всплывает