Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
-2
rated 0 times [  5] [ 7]  / answers: 1 / hits: 18826  / 8 Years ago, mon, august 1, 2016, 12:00:00

I have following JSON array I want to create object form status key count



[
{
id: 65:0,
status: ORANGE
},
{
id: 65:0,
status: GREEN
},
{
id: 65:0,
status: ORANGE
},
{
id: 65:0,
status: YELLOW
},
{
id: 65:0,
status: RED
},
{
id: 65:0,
status: GREEN
},
{
id: 65:0,
status: GREEN
},
{
id: 65:0,
status: ORANGE
},
{
id: 65:0,
status: YELLOW
},
{
id: 65:0,
status: GREEN
}
]


Want to count status key value and create the following Object



{
'ORANGE' : 3,
'GREEN' : 4,
'YELLOW' : 2,
'RED' : 1,
}

More From » arrays

 Answers
10

Use Array#reduce method



var res = data.reduce(function(obj, v) {
// increment or set the property
// `(obj[v.status] || 0)` returns the property value if defined
// or 0 ( since `undefined` is a falsy value
obj[v.status] = (obj[v.status] || 0) + 1;
// return the updated object
return obj;
// set the initial value as an object
}, {})




var data = [{
id: 65:0,
status: ORANGE
}, {
id: 65:0,
status: GREEN
}, {
id: 65:0,
status: ORANGE
}, {
id: 65:0,
status: YELLOW
}, {
id: 65:0,
status: RED
}, {
id: 65:0,
status: GREEN
}, {
id: 65:0,
status: GREEN
}, {
id: 65:0,
status: ORANGE
}, {
id: 65:0,
status: YELLOW
}, {
id: 65:0,
status: GREEN
}];

var res = data.reduce(function(obj, v) {
obj[v.status] = (obj[v.status] || 0) + 1;
return obj;
}, {})

console.log(res);








Although you can use Array#forEach method with the same code.



var res = {};
data.forEach(function(v) {
res[v.status] = (res[v.status] || 0) + 1;
})




var data = [{
id: 65:0,
status: ORANGE
}, {
id: 65:0,
status: GREEN
}, {
id: 65:0,
status: ORANGE
}, {
id: 65:0,
status: YELLOW
}, {
id: 65:0,
status: RED
}, {
id: 65:0,
status: GREEN
}, {
id: 65:0,
status: GREEN
}, {
id: 65:0,
status: ORANGE
}, {
id: 65:0,
status: YELLOW
}, {
id: 65:0,
status: GREEN
}];

var res = {};
data.forEach(function(v) {
res[v.status] = (res[v.status] || 0) + 1;
})

console.log(res);




[#61194] Thursday, July 28, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
harrisonnelsonb

Total Points: 63
Total Questions: 112
Total Answers: 97

Location: Kazakhstan
Member since Mon, Sep 26, 2022
2 Years ago
;