2015-08-07 2 views
2

У меня есть данные, которая идет что-то вроде этогоLooping через массив без использования свойства

var data = [{"empid":1},{"empid":2},{"empid":3},{"empid":4},{"empid":5},{"empid":6},{"empid":7},{"empid":8},{"empid":9}] 

при попытке перебрать его с помощью Javascript, значение, которое возвращается еще один объект.

Я пытаюсь сделать что-то вроде этого

for (var key in data) { 
    console.log(' name=' + key + ' value=' + data[key]); 

} 

Я ожидал увидеть мой EmpId значения как часть «стоимость» в журнале, но «значения» еще один массив объектов.

скрипку: http://jsfiddle.net/sourabhtewari/b6b3qxo7/

Примечание: Я не могу использовать имя свойства, чтобы получить значение, как данные будут динамическими. Поэтому я не могу сделать что-то вроде JSON.stringify(data[key].empid)

ответ

1

Вам нужно перебирать массив, и вы не делаете что с for..in, но с обычной для петли, внутри которой вы можете использовать for..in, потому что каждый элемент массива представляет собой объект:

for (var i=0; i<data.length; i++) { 
    for (var key in data[i]) { 
     console.log(' name=' + key + ' value=' + data[i][key]); 
    } 
} 
1

Просто позвоните в его собственность.

data[key].empid 

См. here Рабочий пример.

0

Вы не должны использовать for in для массивов, которые выполняют итерации свыше Свойства объекта.

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

for (var i = 0; i < data.length; i++) { 
    // .. 
} 

вместо этого. Вы можете получить доступ к значению в цикле как data[i].empid.

+0

Это будет медленным, поскольку JavaScript собирается оценить длину свойство каждая итерация :) –

+0

@AllanChua * Slow *? – CodingIntrigue

+0

Или нет! Современные браузеры могут кэшировать его. В более старом браузере вы можете сделать это, но это делает код менее ясным. – meskobalazs

0

Это потому, что вы преобразование объекта в строку, если вы просто вызовите empid свойства вы увидите значение:

for (var key in data) { 
    console.log(' name=' + key + ' value=' + data[key].empid); 
} 

вы также можете использовать другие функции для перебора массивов, хотя, с картой вы можете получать лет ур свойства и хранить их в другой массив:

values = data.map(function(element) { 
    return element.empid; 
} 
// values will be an array with all the empid properties 

Или Array.forEach():

data.forEach(function (element) { 
    console.log(element.empid); 
} 
0

Поскольку это массив, и это числовая, вы можете посмотреть на свой код как таковой:

var data = [{"empid":1},{"empid":2},{"empid":3},...]; 
var data = {0: {"empid":1}, 1:{"empid":2}, {"empid":3}, ...} 

При использовании цикла for ... in вы на самом деле присваиваете числовое значение key, перебирая все ключи, но это не то, что вы хотите. Когда вы запрашиваете значение в этом случае, вы вернете объект, назначенный этому ключу! Есть два способа сделать это.Во-первых, путем изменения кода:

for (var key in data) { 
    console.log(' name=' + key + ' value=' + data[key].empid); 
} 

или с помощью надлежащим образом перебрать массив с помощью регулярного for цикла:

for (var i = 0; o < data.length; i++) { 
    console.log(' name=' + i + ' value=' + data[i].empid); 
} 
Смежные вопросы