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];
// ...
}
Answer from Jonathan Lonowski on Stack OverflowIt 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];
// ...
}
You can use forEach method to iterate over array of objects.
data.messages.forEach(function(message){
console.log(message)
});
Refer: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
javascript - How to loop through an array containing objects and access their properties - Stack Overflow
Loop through an array of objects and compare values. If value is not found, execute something else.
How to loop through every array inside an array of arrays (and objects) with unknown depth?
Basic Data Structures - Iterate Through All an Array's Items Using For Loops
Videos
I've been searching without success for a way to process some data that arrives as an array of objects. I need to pull out specific data from each object and create a new object from that. I don't actually create the data but based on the way it's formatted when it gets to me, I can tell you the code below would give the same structure. Below that is json of what I need to reformat it as.
It's always the same number slots but they're not always in the order. If they were the order, I'd have no problem. I need the Name, value and mode from each object. Some instances of this don't have what is in this sample the third element and in such cases, mode is not needed.
I'm not hear asking anyone to actually write the code for me -- I prefer to actually learn how to do it. But I'm hoping someone can point me in the right direction.
TIA!
slots[slots.length]={"name":"Name1","task":"Task1"};
slots[slots.length]={"Value":"Current Value","temperature":67,"status":"on"};
slots[slots.length]={"mode":"Current Mode","status":"selected"};I need to convert that to (I can drop the remaining data it's not needed for my task):
{slotsObj:{"name":"Name1","value":"Current Value","mode":"Current Mode"}}Use forEach its a built-in array function. Array.forEach():
yourArray.forEach(function (arrayItem) {
var x = arrayItem.prop1 + 2;
console.log(x);
});
Some use cases of looping through an array in the functional programming way in JavaScript:
1. Just loop through an array
const myArray = [{x:100}, {x:200}, {x:300}];
myArray.forEach((element, index, array) => {
console.log(element.x); // 100, 200, 300
console.log(index); // 0, 1, 2
console.log(array); // same myArray object 3 times
});
Note: Array.prototype.forEach() is not a functional way strictly speaking, as the function it takes as the input parameter is not supposed to return a value, which thus cannot be regarded as a pure function.
2. Check if any of the elements in an array pass a test
const people = [
{name: 'John', age: 23},
{name: 'Andrew', age: 3},
{name: 'Peter', age: 8},
{name: 'Hanna', age: 14},
{name: 'Adam', age: 37}];
const anyAdult = people.some(person => person.age >= 18);
console.log(anyAdult); // true
3. Transform to a new array
const myArray = [{x:100}, {x:200}, {x:300}];
const newArray= myArray.map(element => element.x);
console.log(newArray); // [100, 200, 300]
Note: The map() method creates a new array with the results of calling a provided function on every element in the calling array.
4. Sum up a particular property, and calculate its average
const myArray = [{x:100}, {x:200}, {x:300}];
const sum = myArray.map(element => element.x).reduce((a, b) => a + b, 0);
console.log(sum); // 600 = 0 + 100 + 200 + 300
const average = sum / myArray.length;
console.log(average); // 200
5. Create a new array based on the original but without modifying it
const myArray = [{x:100}, {x:200}, {x:300}];
const newArray= myArray.map(element => {
return {
...element,
x: element.x * 2
};
});
console.log(myArray); // [100, 200, 300]
console.log(newArray); // [200, 400, 600]
6. Count the number of each category
const people = [
{name: 'John', group: 'A'},
{name: 'Andrew', group: 'C'},
{name: 'Peter', group: 'A'},
{name: 'James', group: 'B'},
{name: 'Hanna', group: 'A'},
{name: 'Adam', group: 'B'}];
const groupInfo = people.reduce((groups, person) => {
const {A = 0, B = 0, C = 0} = groups;
if (person.group === 'A') {
return {...groups, A: A + 1};
} else if (person.group === 'B') {
return {...groups, B: B + 1};
} else {
return {...groups, C: C + 1};
}
}, {});
console.log(groupInfo); // {A: 3, C: 1, B: 2}
7. Retrieve a subset of an array based on particular criteria
const myArray = [{x:100}, {x:200}, {x:300}];
const newArray = myArray.filter(element => element.x > 250);
console.log(newArray); // [{x:300}]
Note: The filter() method creates a new array with all elements that pass the test implemented by the provided function.
8. Sort an array
const people = [
{ name: "John", age: 21 },
{ name: "Peter", age: 31 },
{ name: "Andrew", age: 29 },
{ name: "Thomas", age: 25 }
];
let sortByAge = people.sort(function (p1, p2) {
return p1.age - p2.age;
});
console.log(sortByAge);

9. Find an element in an array
const people = [ {name: "john", age:23},
{name: "john", age:43},
{name: "jim", age:101},
{name: "bob", age:67} ];
const john = people.find(person => person.name === 'john');
console.log(john);

The Array.prototype.find() method returns the value of the first element in the array that satisfies the provided testing function.
References
- Array.prototype.some()
- Array.prototype.forEach()
- Array.prototype.map()
- Array.prototype.filter()
- Array.prototype.sort()
- Spread syntax
- Array.prototype.find()
This is probably an easy problem but I just can't figure it out. I'll try to explain in detail within the test script.
// an array of objects obviously...
var loc = [
{"id":12345, "storeNumber":"0466"},
{"id":1235, "storeNumber":"566"}
]
//our number to match the "storeNumber".
var sn = "466";
//If sn is found, we want to execute some code
loc.forEach(function(item) {
if(sn == item.storeNumber) {
//execute some code
}
//if value does not exist, like it currently doesn't...Then I need to prepend a 0 to sn variable that is 3 letters in length.
}]Here's my problem with this...As you can see the variable sn is 466. If there is no match, and the variable is 3 characters in length. I need to prepend a zero to it. sn would then be 0466.
0466 matches storeNumber with id 12345.
How would I go about getting the ID of 0466 if the first condition if(sn == item.storeNumber) doesn't match anything in the array of objects?
The problem here is that the forEach loop will loop through hundreds of records and return true for one if it is found. But that doesn't stop the loop from running, so everything after the loop would still be false, therefore I couldn't have an else statement.
Also, I have to use ES5 syntax because i'm working with ServiceNow and it doesn't allow for ES6.
Let's say I have an array like this:
mainArray = [
0: {
title: "Socials"
chilren: [
0 = {id: 1, title: "Twitter"},
1 = {id: 2, title: "Facebook"},
2 = {id: 3, title: "YouTube"}
]
},
1: {
title: "Forums"
children: [
0 = {
id: 1,
title: "Car Forums
children = [
MORESUBFOLDERS?,
MORESFILES?
]
"},
2 = {id: 3, title: "tech-forum.com"},
3 = {id: 4, title: "fitness-forum,com"}
]
},
n: {...}
]; This array represents a file structure with an unknown number of subfolders and files, with the main array being the root folder.
As you can see, each object inside the mainArray is a subfolder, these subfolder objects can contain an object representing a file, or an array inside an object representing a new subfolder. These sub-sub-folders can also have files as objects or subfolders as arrays, and this can go on for ever in theory. Obviously in practice there's limited depth, but the idea is to have a single function that traverses the entire data structure and returns something like:
rootFolder: {
folder1: {
subfolder1: {
subfolderN {...}
subfolderN {...}
fileN
fileN
}
}
folderN: {
subfolderN: {
subfolderN {...}
subfolderN {...}
fileN
fileN
}
}
}; So I can render this as an HTML nested unordered list.
The formal (and perhaps old) way is Array.prototype.forEach(...):
var arr = ["apple", "banana", "cherry", "mango"];
arr.forEach(function(item, index, _) {
console.log("[" + index + "] = '" + item + "'");
});
var x = [4, 5, 6];
for (i = 0, j = x[i]; i < x.length; j = x[++i]) {
console.log(i,j);
}
A lot cleaner...