Як я можу змусити індекс об'єкта, який відповідає умові (без ітерації вздовж масиву)?
Ви не можете, щось має повторюватися через масив (принаймні один раз).
Якщо умова сильно змінюється, вам доведеться переглядати та переглядати об'єкти в ній, щоб побачити, чи відповідають вони умові. Однак у системі з функціями ES5 (або якщо встановити шим) цю ітерацію можна зробити досить стисло:
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
При цьому використовується нова (ish) Array#some
функція , яка проходить циклічні записи в масиві, поки функція, яку ви їй надаєте, не повернеться в true. Функція, яку я йому надав, зберігає індекс відповідного запису, а потім повертається, true
щоб зупинити ітерацію.
Або звичайно, просто використовуйте for
петлю. Ваші різні варіанти ітерації висвітлюються в цій іншій відповіді .
Але якщо ви завжди будете використовувати одну і ту ж властивість для цього пошуку, і якщо значення властивості унікальні, ви можете циклічно зафіксувати лише один раз і створити об’єкт для їх відображення:
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(Або, знову ж таки, ви можете використовувати for
цикл або будь-який інший варіант .)
Тоді, якщо вам потрібно знайти запис prop2 = "yutu"
, ви можете зробити це:
var entry = prop2map["yutu"];
Я називаю цей масив "перехресним індексуванням". Природно, якщо ви видаляєте або додаєте записи (або змінюєте їх prop2
значення), вам також потрібно оновити об’єкт відображення.
0
?). Обидва рішення роблять більше ітерації, ніж потрібно, що є менш ідеальним, якщо масив великий (хоча шанси настільки великі, як помічає людина, є низькими, якщо не буде багато пошукових запитів ).