How I can convert an array to an array of JavaScript objects.
For example I have an array as
data = [
["fruits","frozen","fresh","rotten"],
["apples",884,494,494],
["oranges",4848,494,4949],
["kiwi",848,33,33]
]
I want to convert it to a name value pair.
For example, first object in the resulting collection would be
{"fruits": "apple", "frozen": 884, "fresh": 494, "rotten": 494}
and so on for rest of the data.
DEMO
Using your supplied data:
var data = [
["fruits","frozen","fresh","rotten"],
["apples",884,494,494],
["oranges",4848,494,4949],
["kiwi",848,33,33]
]
The following function will treat the first element of the array as the keys for the objects properties. It will then loop over the remaining elements, and convert them into an object using these keys. Finally, it will return an array of these new objects.
function convertToArrayOfObjects(data) {
var keys = data.shift(),
i = 0, k = 0,
obj = null,
output = [];
for (i = 0; i < data.length; i++) {
obj = {};
for (k = 0; k < keys.length; k++) {
obj[keys[k]] = data[i][k];
}
output.push(obj);
}
return output;
}
[
{ fruits: 'apples', fresh: 494, frozen: 884, rotten: 494 },
{ fruits: 'oranges', fresh: 494, frozen: 4848, rotten: 4949 },
{ fruits: 'kiwi', fresh: 33, frozen: 848, rotten: 33 }
]
If you use both map and reduce, the solution becomes very elegant:
var collection = [
["fruits","frozen","fresh","rotten"],
["apples",884,494,494],
["oranges",4848,494,4949],
["kiwi",848,33,33]
];
var keys = collection.shift();
collection = collection.map(function (row) {
return keys.reduce(function (obj, key, i) {
obj[key] = row[i];
return obj;
}, {});
});
Output:
[
{ fruits: 'apples', frozen: 884, fresh: 494, rotten: 494 },
{ fruits: 'oranges', frozen: 4848, fresh: 494, rotten: 4949 },
{ fruits: 'kiwi', frozen: 848, fresh: 33, rotten: 33 }
]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With