2016-10-12 3 views
1

У меня есть объект, который представляет собой список чатов, где ключи являются именами в чате, а значение является ссылкой на чат-комнату. Я хочу доставить номера пользователям по 50 номеров за раз. Но я не вижу, как это можно сделать с объектом.Петля через объект, начинающийся с индекса

Предположим, что вы хотите перебрать

var obj = { 
    "a" : 1, 
    "b" : 2. 
    "c" : 3 
} 

Но начинаются с «Ъ», в конечном итоге только с «Ъ» и «с» осуществляется доступ. Можно ли это сделать, включая использование какой-либо карты или таблицы?

+1

Вы можете использовать массив как 'вар включают = [ 'B', 'C']' или 'вар исключить = [ 'а'] 'и перебрать массив и получить значение этого ключа из 'obj'. – Tushar

+1

'Object.keys()' plus '.slice()'? – nnnnnn

+0

Что происходит между каждым «временем»? Вы доставляете комнаты в некоторой асинхронной функции? Некоторый контекст поможет нам разработать решение, подходящее для вашей программы, так как есть несколько способов сделать это. – qxz

ответ

0

Пожалуйста, смотрите пост MDN относительно цикла for...in:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

В принципе, у вас нет никаких гарантий в том порядке, в котором ключи внутри объекта будут перемещаться. Поэтому идея пропустить определенный «индекс» просто не применяется. Я думаю, вам нужно следовать советам в комментариях и либо хранить массив этих ключей, которые вас интересуют, либо выяснить способ быстрого исключения определенных ключей, когда они появятся в вашем цикле.

0

Вы не должны полагаться на ключи объектов, которые нужно сортировать. Хотя большинство браузеров (если не все) поддерживают их сортировку.

Итак, если вы хотите доверять браузерам, вы можете добавить переменную счетчика и начать делать вещи после того, как счетчик достигнет того, что вы хотите. Вы можете получить длину своего объекта, используя 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()' его, чтобы быть уверенным. – user3115197

+0

Хорошая идея. Но '.sort()' не будет работать, если он просто выполняет итерацию объекта. Поэтому я добавил другой метод (используя флаг), который будет работать. – ezakto

+0

Да, я хотел убедиться, что массив ключей отсортирован. – user3115197

0

попробовать этот способ

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 
    } 
} 
Смежные вопросы