我有一个对象数组:
let arr = [{start: 1, end: 5, group: [1, 3, 5]},
{start: 12, end: 17, group: [6, 20,]}]
我需要将此数组转换为:
let arr_transformed = [{start: 1, end: 5, group: 1},
{start: 1, end: 5, group: 3},
{start: 1, end: 5, group: 5},
{start: 12, end: 17, group: 6},
{start: 12, end: 17, group: 20}
]
基本上,我需要复制具有组对象中元素数量的对象值(开始,结束),并将单个组号放入其中。
答案 0 :(得分:2)
我知道已经有很多答案了。即使我以另一种简单的方式提供答案,但不是最好的。
transformObject =(data)=>{
let cnt=0;
let finalArray=[];
for(let i=0;i <data.length;i++){
let grouplen =data[i].group;
for (let j = 0; j < grouplen.length; j++) {
finalArray[cnt]={
start: data[i].start,
end: data[i].end,
group: grouplen[j]
}
cnt++;
}
}
return finalArray;
}
let data = [{start: 1, end: 5, group: [1, 3, 5]},
{start: 12, end: 17, group: [6, 20,]}];
const result = transformObject(data);
console.log("transformed Object:",result);
答案 1 :(得分:0)
您可以将Array#reduce
与Array#forEach
结合使用。
这个想法是循环遍历源数组,然后在每次迭代中循环遍历group
键。在每个内部迭代中,将组成的对象推到最终结果。
let arr = [{start:1,end:5,group:[1,3,5]},{start:12,end:17,group:[6,20]}];
const transformed = arr.reduce((res, { start, end, group }) => {
group.forEach(g => res.push({ start, end, group: g }));
return res;
}, []);
console.log(transformed);
答案 2 :(得分:0)
基本伪代码算法:
result = []
for object in arr {
for group in object.group {
result.push({object.start, object.end, group})
}
}
return result
在外部循环中遍历数组,并在内部循环中遍历各组,将展平的对象推入结果数组对象。
答案 3 :(得分:0)
let arr = [{start: 1, end: 5, group: [1, 3, 5]},
{start: 12, end: 17, group: [6, 20,]}]
var arr_transformed = [];
for(var i = 0; i < arr.length; i++) {
var help = arr[i]['group'];
delete arr[i]['group'];
for(var j = 0; j < help.length; j++) {
arr[i].group = help[j];
arr_transformed.push(arr[i]);
}
}
console.log(arr_transformed);
运行此代码,然后输出
答案 4 :(得分:0)
使用forEach和地图
let results = [];
arr.forEach( i => {
results = results.concat(i.group.map(group => {
return {
start: i.start,
end: i.end,
group
};
}))
});
答案 5 :(得分:0)
很多方法……
这里有一个单行代码,可以减少每个元素并将组映射到累加器数组中:
let arr = [{start: 1, end: 5, group: [1, 3, 5]},{start: 12, end: 17, group: [6, 20,]}]
let r = arr.reduce((a, {start, end, group}) => a.concat(group.map(group => ({start, end, group}))), [])
console.log(r)