Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中有没有通用的方法将四个数组值转换为一个对象数组_Javascript_Typescript - Fatal编程技术网

在javascript中有没有通用的方法将四个数组值转换为一个对象数组

在javascript中有没有通用的方法将四个数组值转换为一个对象数组,javascript,typescript,Javascript,Typescript,如何在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'},

如何在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);
//尝试过的解决方案
让数组=[];设obj={};

对于(设i=0;i可以减少数组,但我建议使用更精简的格式,如值数组的同名键

这种方法首先使用
机器
数组生成一个具有单个属性的对象数组,该数组是减少数据数组的起始值(可以缩短为一个只有对象而没有嵌套结构的数组)

var columnHeaders=['deviceName','Expected','Actual','Lost'],
machine=['machine 1'、'machine 2'、'machine 3'、'machine 4'、'machine 5'],
数据=[{expectedData:[600400500200100],标签:'expectedData'},{actualData:[50030040010050],标签:'Actual'},{LostData:[10010010050],标签:'Lost'},
结果=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);
不是最好的方法,但对于您的数据,您可以尝试

let columnHeaders=['deviceName','Expected','Actual','Lost']
let machine=['machine 1','machine 2','machine 3','machine 4','machine 5']
let 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'}
]

let tableData = machine.reduce((acc, item, key)=>{

        acc.push({
            [columnHeaders[0]]: item,
            [columnHeaders[1]]:data[0].expectedData[key],
            [columnHeaders[2]]:data[1].actualData[key],
            [columnHeaders[3]]:data[2].LostData[key],
        })

        return acc
}, [])



不,对于像您这样的数组没有,因为您的结构在任何方面都不是泛型的。将这些数组传递到这样的方法中-createDataSet(机器、数据、列标题)您可以更改您的输入数据吗?不,这是我们从api调用中获取的输入数据的方式