如何使用javascript从对象数组中获取所需数据?
我有一组像这样的对象如何使用javascript从对象数组中获取所需数据?,javascript,angular,angular5,Javascript,Angular,Angular5,我有一组像这样的对象 var a = [ {'time' : 1539664755070,'T-1': 23 }, {'time' : 1539665095442,'H-1': 24 }, {'time' : 1539666489560,'T-1': 42 }, {'time' : 1539665095442,'H-1': 27 }, {'time': 1539671682230,'H-1': 40.45,'T-2': 33}, {'time': 1539671682230,'T-2
var a = [
{'time' : 1539664755070,'T-1': 23 },
{'time' : 1539665095442,'H-1': 24 },
{'time' : 1539666489560,'T-1': 42 },
{'time' : 1539665095442,'H-1': 27 },
{'time': 1539671682230,'H-1': 40.45,'T-2': 33},
{'time': 1539671682230,'T-2': 30.45,'T-1': 65},
{'time': 1539671682230,'T-2': 42.45,'H-1': 11},
{'time': 1539671682230,'T-1': 50.45,'T-2': 85}
];
data : {
'T-1' : [23,42,50.45],
'T-2' : [33,30.45,85],
'H-1' : [24,27,40.45,11]
}
我想要这样的数据
var a = [
{'time' : 1539664755070,'T-1': 23 },
{'time' : 1539665095442,'H-1': 24 },
{'time' : 1539666489560,'T-1': 42 },
{'time' : 1539665095442,'H-1': 27 },
{'time': 1539671682230,'H-1': 40.45,'T-2': 33},
{'time': 1539671682230,'T-2': 30.45,'T-1': 65},
{'time': 1539671682230,'T-2': 42.45,'H-1': 11},
{'time': 1539671682230,'T-1': 50.45,'T-2': 85}
];
data : {
'T-1' : [23,42,50.45],
'T-2' : [33,30.45,85],
'H-1' : [24,27,40.45,11]
}
如何从给定的数据中获取这些数据?这里有一个解决方案,如果有不清楚的地方,请告诉我:
const data = a.reduce((acc, row) => {
// Loop over keys of each row.
Object.keys(row)
// Filter out the "time" keys.
.filter((key) => key !== 'time')
// Collect the values by key, storing them in the accumulator.
.forEach((key) => {
if (typeof acc[key] === 'undefined') {
acc[key] = []
}
acc[key].push(row[key])
})
return acc
}, {})
const result = {};
a.forEach(object => {
// Loop on each entry in the original array
Object.entries(object).forEach(([key,value]) => {
// Loop through each entry of one entry of the original array
// (ex 'T-1', 'T-2')
if(key !== 'time') {
// It's a key that I'm interested in, so do logic
if(!result[key]) {
// If the key (example 'T-1') haven't been encountered yet,
// initialize it's entry in the result with an empty array
result[key] = [];
}
result[key].push(value);
}
});
});
您可以将arrayreduce与Object.values一起使用,以创建密钥的哈希并添加与之对应的值。然后使用Object.assign和spread语法可以创建最终对象
“时间”:153966559595442,,“T-1”:40.45,'T-2’:截至截至目前,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“T-2”:85} ],
结果=Object.assign{},…Object.valuesdata.reducer,o=>{
让keys=Object.keyso.filterk=>k!='time';
keys.forEachkey=>{
r[key]=r[key]|{[key]:[]};
r[key][key].pusho[key];
};
返回r;
},{};
console.logresult 使用而不是键、值数组的最佳用例。简化了很多事情。您的预期输出在语法上无效。您尝试了什么,它到底有什么问题?@jornsharpe预期输出中有什么问题?这些键不是有效的标识符;你是说例如“T-1”:[…]吗?是的,我更新了邮递。钥匙是静态的吗?也就是说,您每次都希望看到“T-1”、“T-2”和“H-1”?我建议您添加一些有关代码正在执行的操作的信息。