如何在javascript中将四个数组值的数据推送到对象数组中?
// Required input
columnHeaders=['deviceName','Expected','Actual','Lost']
machine=['machine 1','machine 2','machine 3','machine 4','machine 5']
data=[
{expectedData:[600,400,500,200,100],label:'Expected'},
{actualData:[500,300,400,100,50],label:'Actual'},
{LostData:[100,100,100,100,50],label:'Lost'}
]
//预期输出
tableData=[
{deviceName:"machine 1",Expected:600,Actual:500,Lost:100},
{deviceName:"machine 2",Expected:400,Actual:300,Lost:100},
{deviceName:"machine 3",Expected:500,Actual:400,Lost:100},
{deviceName:"machine 4",Expected:200,Actual:100,Lost:100},
{deviceName:"machine 5",Expected:100,Actual:50,Lost:50} ]
我尝试过直接将键作为硬编码值传递,但我只是想知道解决此问题陈述的任何通用方法?请帮我解决这个问题。
//tried solution
let array=[];let obj={};
for(let i=0;i<machine.length;i++){
var expected = data[0].expectedData[i];
var actual = data[1].actualData[i];
var lost = data[2].LostData[i];
obj ={[columnHeaders[0]]:machine[i],[columnHeaders[1]]:expected,[columnHeaders[2]]:actual,[columnHeaders[3]]:lost}
console.log(obj);
array.push(obj);
}
console.log(array);
最佳答案
您可以减少数组,但我建议使用更简化的格式,例如值数组的相同命名键。
这种方法首先使用machine
数组来生成具有单个属性的对象数组,并且该数组是减少数据数组的起始值(可以将其缩短为单个数组)没有嵌套结构的对象)。
var columnHeaders = ['deviceName', 'Expected', 'Actual', 'Lost'],
machine = ['machine 1', 'machine 2', 'machine 3', 'machine 4', 'machine 5'],
data = [{ expectedData: [600, 400, 500, 200, 100], label: 'Expected' }, { actualData: [500, 300, 400, 100, 50], label: 'Actual' }, { LostData: [100, 100, 100, 100, 50], label: 'Lost' }],
result = data.reduce(
(r, { label, ...o }) => Object.values(o)[0].map((v, i) => ({ ...(r[i] || {}), [label]: v })),
machine.map(v => ({ [columnHeaders[0]]: v }))
);
console.log(result);
关于javascript - 是否有任何通用方法可以将四个数组值转换为javascript中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59680323/