Могу ли я найти объект по значению одного из его свойств?

#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. Справедливо, спасибо! Я буду использовать этот метод, если больше ничего не всплывает