2015-07-02 2 views
5

У меня есть некоторые данные в формате JSON следующим образом:Получить ключ объекта с помощью async.each

{ 
    version: 1, 
    partitions: { 
     '0': [ 1616133379 ], 
     '1': [ 1616133378 ], 
     '2': [ 1616133380 ] 
    } 
} 

Я пробегаем по данным с использованием async.each следующим образом:

async.each(topicData.partitions, function(data, callback){ 
    console.log('/brokers/topics/' + topic + '/partitions/' + data + '/state'); 
    callback(); 
}, 
function(err){ 
    if(err) { 
     console.log(err); 
     callback(err); 
    } 
}); 

Выходной сигнал Я получаю:

'/brokers/topics/testing/partitions/1616133379/state' '/brokers/topics/testing/partitions/1616133378/state' '/brokers/topics/testing/partitions/1616133380/state'

Как вы можете видеть data пункта передается через функцию async.each удерживающего значение пары ключ/значение, в то время как я на самом деле хочу, чтобы передать ключ, чтобы произвести этот вывод:

'/brokers/topics/testing/partitions/0/state' '/brokers/topics/testing/partitions/1/state' '/brokers/topics/testing/partitions/2/state'

есть в любом случае я могу получить ключ передается в отличие от стоимости?

Это должно выполняться асинхронно.

Благодаря

+0

возможно дубликат [async.js каждого получить индекс в итератор] (http://stackoverflow.com/questions/17516981/async-js-each-get-index -in-iterator) – andlrc

+1

Google 'async.each key' -> [I Feel Lucky] – andlrc

ответ

5

Вы можете использовать forEachOf, итератор получает передается значение и ключ каждого элемента в случае объекта.

iterator(item, key, callback) - A function to apply to each item in obj. The key is the item's key, or index in the case of an array. The iterator is passed a callback(err) which must be called once it has completed. If no error has occurred, the callback should be run without arguments or with an explicit null argument.

Использование:

async.forEachOf(topicData.partitions, function(item, key, callback){ 
    console.log('/brokers/topics/' + topic + '/partitions/' + key + '/state'); 
    callback(); 
}, function(err){ 
    if(err) { 
    console.log(err); 
    callback(err); 
    } 
}); 
+0

Отлично, что сработало спасибо. Я новичок в асинхронной библиотеке, поэтому не видел этого еще –

0

Попробуйте поставить это в цикле.

console.log(topicData.partitions.indexOf(data)); 
+0

Это просто породило ошибку' console.log (topicData.partitions.indexOf (data)); ^ ТипError: Объект # не имеет метода 'indexOf'' –

Смежные вопросы