I am trying to loop through the following:
{
"messages": [{
"msgFrom": "13223821242",
"msgBody": "Hi there"
}, {
"msgFrom": "Bill",
"msgBody": "Hello!"
}]
}
I want to retrieve msgFrom
and msgBody
I've tried:
for [var key in data] {
var obj = data[key];
for [var prop in obj] {
if[obj.hasOwnProperty[prop]]{
console.log[prop + " = " + obj[prop]];
}
}
}
But the console log prints [Object]
Any ideas what im doing wrong?
isherwood
54.4k15 gold badges105 silver badges147 bronze badges
asked Oct 22, 2013 at 22:18
3
It appears you may just have missed the "messages"
property in the data
, so the loop is likely iterating the root Object
rather than the Array
:
for [var key in data.messages] {
var obj = data.messages[key];
// ...
}
Unless data
was set to messages
before the given snippet.
Though, you should consider changing that to a normal for
loop for the Array
:
for [var i = 0, l = data.messages.length; i < l; i++] {
var obj = data.messages[i];
// ...
}
answered Oct 22, 2013 at 22:24
Jonathan LonowskiJonathan Lonowski
119k32 gold badges196 silver badges198 bronze badges
4
In your script, data is your whole object.
key is "messages", which is an array you need to iterate through like this:
for [var key in data] {
var arr = data[key];
for[ var i = 0; i < arr.length; i++ ] {
var obj = arr[ i ];
for [var prop in obj] {
if[obj.hasOwnProperty[prop]]{
console.log[prop + " = " + obj[prop]];
}
}
}
}
answered Oct 22, 2013 at 22:23
JustAndreiJustAndrei
8334 silver badges17 bronze badges
0
All the answers provided here uses normal function but these days most of our code uses arrow functions in ES6. I hope my answer will help readers on how to use arrow function when we do iteration over array of objects
let data = {
"messages": [{
"msgFrom": "13223821242",
"msgBody": "Hi there"
}, {
"msgFrom": "Bill",
"msgBody": "Hello!"
}]
}
Do .forEach on array using arrow function
data.messages.forEach[[obj, i] => {
console.log["msgFrom", obj.msgFrom];
console.log["msgBody", obj.msgBody];
}];
Do .map on array using arrow function
data.messages.map[[obj, i] => {
console.log["msgFrom", obj.msgFrom];
console.log["msgBody", obj.msgBody];
}];
answered Sep 5, 2018 at 18:04
Hemadri DasariHemadri Dasari
30.5k33 gold badges113 silver badges152 bronze badges
1
Iterations
Method 1: forEach
method
messages.forEach[function[message] {
console.log[message];
}
Method 2: for..of
method
for[let message of messages]{
console.log[message];
}
Note: This method might not work with objects, such as:
let obj = { a: 'foo', b: { c: 'bar', d: 'daz' }, e: 'qux' }
Method 2: for..in
method
for[let key in messages]{
console.log[messages[key]];
}
slayer
2103 silver badges10 bronze badges
answered Jun 22, 2018 at 5:12
Arshid KVArshid KV
9,2353 gold badges33 silver badges35 bronze badges
To loop through an object array or just array in javascript, you can do the following:
var cars = [{name: 'Audi'}, {name: 'BMW'}, {name: 'Ferrari'}, {name: 'Mercedes'}, {name: 'Maserati'}];
for[var i = 0; i < cars.length; i++] {
console.log[cars[i].name];
}
There is also the forEach[] function, which is more "javascript-ish" and also less code but more complicated for its syntax:
cars.forEach[function [car] {
console.log[car.name];
}];
And both of them are outputting the following:
// Audi
// BMW
// Ferrari
// Mercedes
// Maserati
answered Apr 24, 2018 at 8:37
Tarvo MäeseppTarvo Mäesepp
4,2373 gold badges40 silver badges88 bronze badges
1
The
suggested for loop is quite fine but you have to check the properties with hasOwnProperty
. I'd rather suggest using Object.keys[]
that only returns 'own properties' of the object [//developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys]
var data = {
"messages": [{
"msgFrom": "13223821242",
"msgBody": "Hi there"
}, {
"msgFrom": "Bill",
"msgBody": "Hello!"
}]
};
data.messages.forEach[function[message, index] {
console.log['message index '+ index];
Object.keys[message].forEach[function[prop] {
console.log[prop + " = " + message[prop]];
}];
}];
answered Jun 3, 2017 at 16:06
Booster2oooBooster2ooo
1,2839 silver badges11 bronze badges
To reference the contents of the single array containing one or more objects i.e. everything in the brackets of something like this {messages: [{"a":1,"b":2}] } ,just add [0] to the query to get the first array element
e.g. messages[0] will reference the object {"a":1,"b":2} as opposed to just messages which would reference the entire array [{"a":1,"b":2}]
from there you can work with the result as typical object and use Object.keys for example to get "a" and "b".
answered Jun 3, 2017 at 15:55
sarorasarora
8738 silver badges18 bronze badges
for [let key in data] {
let value = data[key];
for [i = 0; i < value.length; i++] {
console.log[value[i].msgFrom];
console.log[value[i].msgBody];
}
}
answered Dec 7, 2019 at 19:15
VishwanathVishwanath
1701 silver badge12 bronze badges
1
Here is a generic way to loop through the field objects in an object [person]:
for [var property in person] {
console.log[property,":",person[property]];
}
The person obj looks like this:
var person={
first_name:"johnny",
last_name: "johnson",
phone:"703-3424-1111"
};
answered Dec 13, 2020 at 22:06
GeneGene
10.4k1 gold badge64 silver badges57 bronze badges
arr = [{food:"Mandazi", Price: 5},{food:"Black Tea", Price: 20},{food:"Black Coffee", Price: 20} ]; txt = ""; for [i = 0; i "; } document.getElementById["show"].innerHTML = txt;
answered Mar 24, 2021 at 13:39
1