У меня есть объект в JavaScript:
{
abc: '...',
bca: '...',
zzz: '...',
xxx: '...',
ccc: '...',
// ...
}
Я хочу использовать for
цикл, чтобы получить его свойства. И я хочу повторить это по частям (не все свойства объекта сразу).
С помощью простого массива я могу сделать это стандартным for
циклом:
for (i = 0; i < 100; i++) { ... } // first part
for (i = 100; i < 300; i++) { ... } // second
for (i = 300; i < arr.length; i++) { ... } // last
Но как это сделать с объектами?
Ответы:
Для большинства объектов используйте
for .. in
:С ES6, если вам нужны одновременно ключи и значения, выполните
Чтобы избежать регистрации унаследованных свойств, проверьте с помощью hasOwnProperty :
Вам не нужно проверять
hasOwnProperty
при итерации ключей, используете ли вы простой объект (например, тот, который вы сделали сами{}
).В этой документации MDN более подробно объясняется, как обращаться с объектами и их свойствами.
Если вы хотите сделать это «порциями», лучше всего извлечь ключи из массива. Поскольку заказ не гарантирован, это правильный путь. В современных браузерах вы можете использовать
Чтобы быть более совместимым, вам лучше сделать это:
Затем вы можете перебирать свои свойства по индексу
yourobject[keys[i]]
:источник
keys
из приведенного кода должно быть достаточно.Вот еще одно итерационное решение для современных браузеров:
Или без функции фильтра:
Однако вы должны учитывать, что свойства в объекте JavaScript не отсортированы, т.е. не имеют порядка.
источник
С помощью
Object.entries
вы делаете что-то вроде этого.Метод Object.entries () возвращает массив собственного перечисляемого свойства данного объекта [ключ, значение]
Таким образом, вы можете перебирать объект и иметь
key
иvalue
для каждого объекта и получить что-то вроде этого.или как это
Для справки взгляните на документы MDN для записей объектов
источник
С новыми функциями ES6 / ES2015 вам больше не нужно использовать объект для перебора хеша. Вы можете использовать карту . Карты Javascript хранят ключи в порядке вставки, то есть вы можете перебирать их, не проверяя hasOwnProperty, что всегда было хаком.
Итерация по карте:
или используйте forEach:
источник
Если вам нужен ключ и значение при итерации, вы можете использовать цикл for ... с Object.entries .
источник
Единственный надежный способ сделать это - сохранить данные вашего объекта в 2 массива, один из ключей и один для данных:
Затем вы можете перебирать массивы, как обычно:
Я не использую
Object.keys(obj)
, потому что это IE 9+.источник
-> если мы перебираем объект JavaScript, используя и находим ключ массива объектов
источник
Если вы хотите выполнить итерацию всего объекта сразу, вы можете использовать
for in
цикл:Но если вы хотите разделить объект на части, вы не сможете. Там нет никакой гарантии, что свойства в объекте в любом указанном порядке. Поэтому я могу придумать два решения.
Первым из них является «удаление» уже прочитанных свойств:
Другое решение, которое я могу придумать, это использовать Array of Arrays вместо объекта:
Тогда стандартный
for
цикл будет работать.источник
Я наконец-то придумал удобную служебную функцию с унифицированным интерфейсом для итерации объектов, строк, массивов, TypedArrays, карт, наборов (любых итерируемых элементов).
https://github.com/alrik/iterate-javascript
источник
Вы можете попробовать использовать lodash. Современная библиотека утилит JavaScript, обеспечивающая модульность, производительность и дополнительные возможности для быстрой итерации объекта: -
источник
Для итерации объекта мы обычно используем
for..in
цикл. Эта структура будет проходить по всем перечисляемым свойствам, включая те, которые наследуются через наследование прототипов. Например:Тем не менее, он
for..in
будет перебирать все перечисляемые элементы, и это не позволит нам разбить итерацию на куски. Для этого мы можем использовать встроеннуюObject.keys()
функцию для извлечения всех ключей объекта в массиве. Затем мы можем разделить итерацию на несколько циклов for и получить доступ к свойствам с помощью массива ключей. Например:источник
источник
Object
s в порядке. Они не.If you can make sense of the sentence it worked
работает только из-за деталей реализации. Это совсем не гарантировано. Также вы не должны TitleCase ваши функции и переменные. Это дляclass
эс.На самом деле PITA это не является частью стандартного Javascript.
Примечание. Я переключил параметры обратного вызова на (значение, ключ) и добавил третий объект, чтобы API соответствовал другим API.
Используйте это так
источник
this
для обратного вызова вы можете установить любое значение, так как обратный вызов имеет свой собственный контекст.objectForEach
функцию. Извините, если это сбивает с толку.Да. Вы можете перебрать объект, используя цикл for. Вот пример
ПРИМЕЧАНИЕ: приведенный выше пример будет работать только в IE9 +. Смотрите поддержку браузера Objec.keys здесь .
источник
Попробуй онлайн
источник