#javascript
#javascript
Вопрос:
У меня есть объект, представляющий собой список комнат чата, где ключами являются имена комнат чата, а значением является ссылка на комнату чата. Я хочу доставлять комнаты пользователям по 50 комнат за раз. Но я не понимаю, как это можно сделать с объектом.
Предположим, вы хотите выполнить цикл по
var obj = {
"a" : 1,
"b" : 2.
"c" : 3
}
Но начинайте с «b», в итоге будут доступны только «b» и «c». Можно ли это сделать, в том числе с использованием какой-либо карты или таблицы?
Комментарии:
1. Вы можете использовать массив типа
var include = ['b', 'c']
илиvar exclude = ['a']
и перебирать массив и получать значение этого ключа изobj
.2.
Object.keys()
plus.slice()
?3. Что происходит между каждым «временем»? Вы предоставляете номера в какой-то асинхронной функции? Некоторый контекст поможет нам разработать решение, подходящее для вашей программы, поскольку существует несколько способов сделать это
Ответ №1:
Вы не должны полагаться на сортируемые ключи объектов. Хотя большинство браузеров (если не все) сохраняют их отсортированными.
Итак, если вы хотите доверять браузерам, вы можете добавить переменную counter и начать делать что-то после того, как счетчик достигнет того, что вы хотите. Вы можете получить длину вашего объекта, используя Object.keys()
(возвращает массив) . Смешивая оба, вы можете сделать это:
var object = {
a: 1,
b: 2,
c: 3
};
var keys = Object.keys(object);
var counter;
for (counter = 0; counter < keys.length; counter ) {
if (counter < 1) continue; // Skip until the second element
console.log(object[keys[counter]]);
}
Если вы не знаете позицию ключа заранее, вы можете добавить переменную флага и активировать ее при достижении нужного ключа, например:
var keys = Object.keys(object);
var counter;
var start = false;
for (counter = 0; counter < keys.length; counter ) {
if (keys[counter] === 'b') start = true;
if (!start) continue;
console.log(object[keys[counter]]);
}
Комментарии:
1. Вы всегда можете
.sort()
это сделать, просто чтобы быть уверенным.2. Хорошая идея. Но
.sort()
не будет работать, если он просто повторяет объект. Итак, я добавил другой метод (с использованием флага), который будет работать.3. Да, я хотел убедиться, что массив ключей отсортирован.
Ответ №2:
Пожалуйста, смотрите Сообщение MDN о for...in
цикле:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for…in
По сути, у вас нет гарантии относительно порядка, в котором будут повторяться ключи внутри объекта. Таким образом, идея пропустить определенный «индекс» просто неприменима. Я думаю, вам нужно следовать совету в комментариях и либо сохранить массив тех ключей, которые вас интересуют, либо найти способ быстро исключить определенные ключи по мере их появления в вашем цикле.
Ответ №3:
попробуйте этот способ
var obj = {
'a' : 1,
'b' : 2.
'c' : 3
};
var ignoreItems = ['a'];
for (var key in obj) {
if (ignoreItems.indexOf(key) === -1) {
// ADD YOUR CODE HERE
}
}