使用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)
将其添加到变量,并检查其是否真实。如果不是,只返回项
。