Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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
使用ES6将javascript中的对象数据数组转换为另一种形式_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

使用ES6将javascript中的对象数据数组转换为另一种形式

使用ES6将javascript中的对象数据数组转换为另一种形式,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,所以我有以下数据结构 var data = [ {name:'AWB ', data:[12,13 ...]}, {name:'CTS', data:[40,53 ...]} ] 我有另一个数组映射名称 var nameditems = [ {name:'AWB', json_col:'awb_no'}, {name:'CTS', json_col:'cts'} ] 从上面的示例可以看出,每个数组对象中的每个数据都有两个或更多项 我想把数据转换成这样 [

所以我有以下数据结构

var data = [
   {name:'AWB ', data:[12,13 ...]},
   {name:'CTS', data:[40,53 ...]}
   ]
我有另一个数组映射名称

var nameditems = [
    {name:'AWB', json_col:'awb_no'},
    {name:'CTS', json_col:'cts'}
 ]
从上面的示例可以看出,每个数组对象中的每个数据都有两个或更多项

我想把数据转换成这样

[

 {awb_no:12, cts:40},
 {awb_no:13, cts:53},
]
这里有更多的专栏,但为了简洁起见,我只包括了前两篇。数据名称也是动态的,但命名的\u items json\u col具有密钥对中的实际名称

因此,我在es6中尝试了以下方法

let resultarray = [];
const totalitems = data[0].data.length;
for (int i = 0; i < data[0].data.length; i++)
  data.forEach(item => {
    let jsoncolname = nameditems.find(col => col.name === item.name);
    console.log(jsoncolname, json_col) //how do i add as key below

    resultarray.push({}) //here am stuck
  })
让resultarray=[];
const totalitems=数据[0]。data.length;
对于(int i=0;i{
让jsoncolname=nameditems.find(col=>col.name==item.name);
log(jsoncolname,json\u col)//如何在下面添加as键
resultaray.push({})//我被卡住了
})

您可以将一个对象作为映射的键名,并使用指定的值迭代数组和新对象的数据

var data=[{name:'AWB',data:[12,13]},{name:'CTS',data:[40,53]},
nameditems=[{name:'AWB',json_col:'AWB_no'},{name:'CTS',json_col:'CTS'}],
keys=Object.assign(…nameditems.map({name,json_col})=>({[name]:json_col})),
result=data.reduce((r,{name,data})=>{
data.forEach((v,i)=>(r[i]=r[i]| |{})[keys[name]]=v)
返回r;
}, []);
控制台日志(结果)

。作为控制台包装器{max height:100%!important;top:0;}
您可以为映射的键名获取一个对象,并使用指定的值迭代数组和新对象的数据

var data=[{name:'AWB',data:[12,13]},{name:'CTS',data:[40,53]},
nameditems=[{name:'AWB',json_col:'AWB_no'},{name:'CTS',json_col:'CTS'}],
keys=Object.assign(…nameditems.map({name,json_col})=>({[name]:json_col})),
result=data.reduce((r,{name,data})=>{
data.forEach((v,i)=>(r[i]=r[i]| |{})[keys[name]]=v)
返回r;
}, []);
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
假设
数据
数组中的所有项的长度相同。通过映射通过
name
找到的相应
data
可以将
nameditems
减少到另一个数组中

var数据=[{
名称:“AWB”,
数据:[12,13,14]
},
{
名称:'CTS',
数据:[40,53,67]
}
]
变量nameditems=[{
名称:“AWB”,
json_col:'awb_no'
},
{
名称:'CTS',
json_col:'cts'
}
]
console.log(
名称减少(
(项目{
名称
json_col:prop
})=>data.find(item=>item.name==name).data.map((值,索引)=>{
const obj=items[index]| |{}//选择现有项或创建新项
obj[prop]=值//填充该道具
返回obj
}),
[]
)

)
假设
数据
数组在
数据
数组中的所有项上具有相同的长度。通过映射通过
name
找到的相应
data
可以将
nameditems
减少到另一个数组中

var数据=[{
名称:“AWB”,
数据:[12,13,14]
},
{
名称:'CTS',
数据:[40,53,67]
}
]
变量nameditems=[{
名称:“AWB”,
json_col:'awb_no'
},
{
名称:'CTS',
json_col:'cts'
}
]
console.log(
名称减少(
(项目{
名称
json_col:prop
})=>data.find(item=>item.name==name).data.map((值,索引)=>{
const obj=items[index]| |{}//选择现有项或创建新项
obj[prop]=值//填充该道具
返回obj
}),
[]
)

)
另一个简单的ES6替代方案:

var data = [{name:'AWB', data:[12,13]}, {name:'CTS', data:[40,53]}];
var nameditems = [{name:'AWB', json_col:'awb_no'},{name:'CTS', json_col:'cts'}]

var nameditemsObj = nameditems.reduce((all, {name, json_col}) => {
    all[name] = json_col;
    return all;
}, {});

var result = data.reduce((all, {name, data:vals}) => {

    vals.forEach((val, i) => {
        all[i][nameditemsObj[name]] = val;
    });

    return all;

}, [...new Array(data.length)].map( _ => ({})));

console.log(result);

另一个简单的ES6替代方案:

var data = [{name:'AWB', data:[12,13]}, {name:'CTS', data:[40,53]}];
var nameditems = [{name:'AWB', json_col:'awb_no'},{name:'CTS', json_col:'cts'}]

var nameditemsObj = nameditems.reduce((all, {name, json_col}) => {
    all[name] = json_col;
    return all;
}, {});

var result = data.reduce((all, {name, data:vals}) => {

    vals.forEach((val, i) => {
        all[i][nameditemsObj[name]] = val;
    });

    return all;

}, [...new Array(data.length)].map( _ => ({})));

console.log(result);

数据部分的长度是否相同?看起来您想转换为
{awb\u no:data[0],cts:data[0]}
awb\u no:data[1],cts:data[1]
?键名
awb\u no
cts
是否已修复?是的,数据始终具有相同的值lengtjh@lealceldeiroawb_no和cts的名称是固定的,但awb和cts是动态的,并且不断变化。awb_no和cts分别表示awb和cts的
数据部分是否长度相同?看起来您想转换为
{awb\u no:data[0],cts:data[0]}
awb\u no:data[1],cts:data[1]
?键名
awb\u no
cts
是否已修复?是的,数据始终具有相同的值lengtjh@lealceldeiroawb_no和cts的名称是固定的,但awb和cts是动态的,并且不断变化。awb_编号和cts代表awb和ctsrespectively@GEOFFREYMWANGI很高兴我能提供帮助。我如何调整上面的代码以首先检查data.find.data的结果,然后再执行.data.map,因为我有另一种情况可能需要检查数据是否存在?提取
data.find(item=>item.name==name)
将其添加到变量,并检查其是否真实。如果不只是返回
items
@geoffreymwang,我很高兴能帮上忙。我如何调整上面的代码以首先检查数据的结果。在执行.data.map之前找到.data是否存在,因为我有另一种情况可能需要检查数据是否存在?提取
data.find(item=>item.name==name)
将其添加到变量,并检查其是否真实。如果不是,只返回