I've got some case to loop an object which has multiple keys and get specific value and push to an array each, I hope anyone in this forum can help me thanks
[{
"total_sms": 887,
"total_submitted": 101,
"total_in_queue": 696,
"total_processed": 0,
"total_delivered": 0,
"total_failed": 0,
"date": "2019-08-06"
}, {
"total_sms": 888,
"total_submitted": 102,
"total_in_queue": 697,
"total_processed": 0,
"total_delivered": 0,
"total_failed": 0,
"date": "2019-08-06"
}]
expected
total_sms = [887,888]
total_submitted = [101,102]
and etc
You can use Array.reduce
to group by the keys of each object in your array. The keys of each object can be obtained from Object.keys
.
Now for each key in the object if it is present then just add it to the array else create a new array and add that element:
const data = [{ "total_sms": 887, "total_submitted": 101, "total_in_queue": 696, "total_processed": 0, "total_delivered": 0, "total_failed": 0, "date": "2019-08-06" }, { "total_sms": 888, "total_submitted": 102, "total_in_queue": 697, "total_processed": 0, "total_delivered": 0, "total_failed": 0, "date": "2019-08-06" }]; const grouped = data.reduce((acc, ele) => { const keys = Object.keys(ele); keys.forEach(key => acc[key] = acc[key] ? acc[key].concat(ele[key]) : [ele[key]]); return acc; }, {}); console.log(grouped);
let objs = [{ "total_sms": 887, "total_submitted": 101, "total_in_queue": 696, "total_processed": 0, "total_delivered": 0, "total_failed": 0, "date": "2019-08-06" }, { "total_sms": 888, "total_submitted": 102, "total_in_queue": 697, "total_processed": 0, "total_delivered": 0, "total_failed": 0, "date": "2019-08-06" }]; let arrays = objs.reduce((arrays, obj) => { Object.entries(obj).forEach(([key, value]) => { arrays[key] = arrays[key] || []; arrays[key].push(value); }); return arrays; }, {}); console.log(arrays);
var temp = [{
"total_sms": 887,
"total_submitted": 101,
"total_in_queue": 696,
"total_processed": 0,
"total_delivered": 0,
"total_failed": 0,
"date": "2019-08-06"
}, {
"total_sms": 888,
"total_submitted": 102,
"total_in_queue": 697,
"total_processed": 0,
"total_delivered": 0,
"total_failed": 0,
"date": "2019-08-06"
}
]
var obj = {
}
temp.forEach(item => {
Object.keys(item).map(key => {
obj[key] = (obj[key]||[]).concat(item[key])
})
})
console.log(obj)
If you want a single element data then map()
will help you
const array = [{ total_sms: 887, total_submitted: 101, total_in_queue: 696, total_processed: 0, total_delivered: 0, total_failed: 0, date: '2019-08-06', }, { total_sms: 888, total_submitted: 102, total_in_queue: 697, total_processed: 0, total_delivered: 0, total_failed: 0, date: '2019-08-06', }]; const sms = array.map((m) => { return m.total_sms; }); console.log(sms);
If you want to all keys into an array then you can achieve it by only one for
loop
const array = [{ total_sms: 887, total_submitted: 101, total_in_queue: 696, total_processed: 0, total_delivered: 0, total_failed: 0, date: '2019-08-06', }, { total_sms: 888, total_submitted: 102, total_in_queue: 697, total_processed: 0, total_delivered: 0, total_failed: 0, date: '2019-08-06', }]; const result = {}; for (let i = 0; i < array.length; i += 1) { const element = array[i]; Object.keys(element) .forEach((subElem) => { if (result[subElem]) { result[subElem].push(element[subElem]); } else { result[subElem] = [element[subElem]]; } }); } console.log(result);
Try
data.forEach(d => Object.keys(d).forEach(k=> r[k]=(r[k]||[]).concat(d[k]) ));
let data = [{ "total_sms": 887, "total_submitted": 101, "total_in_queue": 696, "total_processed": 0, "total_delivered": 0, "total_failed": 0, "date": "2019-08-06" }, { "total_sms": 888, "total_submitted": 102, "total_in_queue": 697, "total_processed": 0, "total_delivered": 0, "total_failed": 0, "date": "2019-08-06" }]; let r={}; data.forEach(d => Object.keys(d).forEach(k=> r[k]=(r[k]||[]).concat(d[k]) )); Object.keys(r).forEach(k=> this[k]=r[k] ); // save as global variables console.log('total_sms =', total_sms); console.log('total_submitted =', total_submitted); console.log('...')
Use Array.reduce staring with an object having empty arrays and use for .. in
inside it to fill that initial object from the current onw in the loop :
var temp = [ { total_sms: 887, total_submitted: 101, total_in_queue: 696, total_processed: 0, total_delivered: 0, total_failed: 0, date: "2019-08-06" }, { total_sms: 888, total_submitted: 102, total_in_queue: 697, total_processed: 0, total_delivered: 0, total_failed: 0, date: "2019-08-06" } ]; const result = temp.reduce( (all, curr) => { for (let k in curr) { all[k].push(curr[k]); } return all; }, { total_sms: [], total_submitted: [], total_in_queue: [], total_processed: [], total_delivered: [], total_failed: [], date: [] } ); console.log(result);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.