Javascript 转换嵌套数组->;阵列->;对象到数组->;对象=>;对象值:对象值

Javascript 转换嵌套数组->;阵列->;对象到数组->;对象=>;对象值:对象值,javascript,arrays,angular,object,reduce,Javascript,Arrays,Angular,Object,Reduce,在下面的数据中。我想让它成为一个对象,其中一些值作为键,如下所示: 从这里开始:链接到整个数据(this.localObject) 到此处: const employees = [ { "EmployeeID": "100A", "11-19": "30"}, { "EmployeeID": "100A", "11-20": "40"}, { "EmployeeID": "100A", "11-21": "50"}, { "EmployeeID": "100A", "11

在下面的数据中。我想让它成为一个对象,其中一些值作为键,如下所示:

从这里开始:链接到整个数据(this.localObject)

到此处:

const employees = [
   { "EmployeeID": "100A", "11-19": "30"},
   { "EmployeeID": "100A", "11-20": "40"},
   { "EmployeeID": "100A", "11-21": "50"},
   { "EmployeeID": "100A", "11-22": "60"},
   { "EmployeeID": "100B", "11-19": "1"},
   { "EmployeeID": "100B", "11-20": "2"},
   { "EmployeeID": "100B", "11-21": "3"},
   { "EmployeeID": "100B", "11-22": "4"}
]

//and so on...
到目前为止,我已经尝试:

this.localData = this.localObject.employees;
const firstLevel = this.localData.map(x => x.aval);

firsLevel将为我提供一个更接近我需要的对象数组,现在我需要将的“start”值作为一个键和的“ava”值作为其自身对象容器中的值属性

您可以使用
Array.flatMap
并使用
Array.map
迭代其中的
aval
,如下所示

const employees=[{
“雇员ID”:“100A”,
“名字”:“唐斯”,
“阿瓦尔”:[
{“开始”:“11-19”,“结束”:“2”,“ava”:“30”,“健康”:“4”},
{“开始”:“11-20”,“结束”:“2”,“ava”:“40”,“健康”:“4”},
{“开始”:“11-21”,“结束”:“2”,“ava”:“50”,“健康”:“4”},
{“开始”:“11-22”,“结束”:“2”,“ava”:“60”,“健康”:“4”}
]
},
{
“雇员ID”:“100B”,
“名字”:“麦肯齐”,
“阿瓦尔”:[
{“开始”:“11-19”,“结束”:“2”,“ava”:“1”,“健康”:“4”},
{“开始”:“11-20”,“结束”:“2”,“ava”:“2”,“健康”:“4”},
{“开始”:“11-21”,“结束”:“2”,“ava”:“3”,“健康”:“4”},
{“开始”:“11-22”,“结束”:“2”,“ava”:“4”,“健康”:“4”}
]
},
]
让res=employeed.flatMap({EmployeeID,aval})=>
aval.map(({start,ava})=>({EmployeeID[start]:ava})))

log(res)
您还需要迭代内部数组并构建单个数组

var数组=[{EmployeeID:“100A”,FirstName:“Downs”,aval:[{start:“11-19”,end:“2”,ava:“30”,health:“4”},{start:“11-20”,end:“2”,ava:“40”,health:“4”},{start:“11-22”,end:“2”,ava:“60”,health:“4”},{EmployeeID:“100B”,FirstName:“Mckenzie”,ava:[{start:“11-19”,结束:“2”,ava:“1”,健康:“4”},{开始:“11-20”,结束:“2”,ava:“2”,健康:“4”},{开始:“11-21”,结束:“2”,ava:“3”,健康:“4”},{开始:“11-22”,结束:“2”,ava:“4”,健康:“4”},
result=array.reduce((r,{EmployeeID,aval})=>[
R
…aval.map(({start,ava})=>({EmployeeID,[start]:ava}))
], []);
console.log(结果);

。作为控制台包装器{max height:100%!important;top:0;}
看起来,你是
flatMap
的超级粉丝,它在edge中实际上不起作用……哦,是的,我是(在理解了它的威力之后)。考虑到“Edge”的情况,我怀疑它是否也支持其他ESNext功能,至少有些。但我们不应该因为Edge而错过任何新功能。:)伙计,我喜欢这个答案,但我使用的框架在ES6上有问题,无法很好地与FlatMap配合,他们正在研究解决方案,但没有问题@brohymm.:)很好…
FlatMap
对于polyfillNice来说是微不足道的,我可以问一些好的资源来学习reduce()?。这不是我的强项。你可以从这里开始:,但我没有其他资源。只要经常尝试使用它。。。
this.localData = this.localObject.employees;
const firstLevel = this.localData.map(x => x.aval);