在Javascript中将对象数组转换为集合的有效方法 const myObj={ 答:[1,2,3], b:[2,4,6], c:[10,20,30] }

在Javascript中将对象数组转换为集合的有效方法 const myObj={ 答:[1,2,3], b:[2,4,6], c:[10,20,30] },javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,进入 const myCollection=[ {a:1,b:2,c:10}, {a:2,b:4,c:20}, {a:3,b:6,c:30} ] 我尝试了Object.entries、Object.keys和map的组合,但我总是发现自己在myObj上迭代了两次或更多次,我对自己想出的任何解决方案都不满意。 那么,您认为实现这一目标的最有效(就时间复杂性而言)和最优雅的方式是什么?可以使用数组来实现。减少。我已附上转换代码 const myObj={ 答:[1,2,3], b:[2,4,6]

进入

const myCollection=[
{a:1,b:2,c:10},
{a:2,b:4,c:20},
{a:3,b:6,c:30}
]
我尝试了
Object.entries
Object.keys
map
的组合,但我总是发现自己在
myObj
上迭代了两次或更多次,我对自己想出的任何解决方案都不满意。
那么,您认为实现这一目标的最有效(就时间复杂性而言)和最优雅的方式是什么?

可以使用
数组来实现。减少
。我已附上转换代码

const myObj={
答:[1,2,3],
b:[2,4,6],
c:[10,20,30]
}
常量myCollection=[
{a:1,b:2,c:10},
{a:2,b:4,c:20},
{a:3,b:6,c:30}
]
const maxLength=Math.max(…Object.values(myObj.map)(item=>item.length));
常量myObjKeys=Object.keys(myObj);
const result=[…数组(maxLength).keys()].map((索引)=>{
返回myobjkey.reduce((acc,curKey)=>{
if(myObj[curKey].length>index){
acc[curKey]=myObj[curKey][index];
}
返回acc;
}, {});
});

控制台日志(结果)使用
ramdajs
,我可以向您推荐一条如下的捷径

const myObj={
答:[1,2,3],
b:[2,4,6],
c:[10,20,30]
}
常数res=R.map(
R.zipObj(R.keys(myObj)),
R.值(myObj)
)
console.log(res)

您可以减少条目并映射嵌套数组

const
object={a:[1,2,3],b:[2,4,6],c:[10,20,30]},
结果=对象
.条目(对象)
.reduce((r[k,a])=>a.map((v,i)=>({…r[i],[k]:v})),[]);
控制台日志(结果)
您可以对
对象使用
map()
值,然后对每个值使用
reduce()

const myObj={
答:[1,2,3],
b:[2,4,6],
c:[10,20,30]
}
让keys=Object.keys(myObj);
const arr=Object.values(myObj.map)((a)=>a.reduce((ac,a,i)=>({…ac[keys[i]]:a}),{});

console.log(arr)
以防您需要可变长度:

const myObj={
答:[1,2,3],
b:[2,4,6,8,10],
c:[10,20,30,40],
};
让myCollection=[];
Object.keys(myObj).forEach((k)=>{
for(设i=0;iconsole.log(myCollection)请共享您尝试过的代码。还有一些细节是需要的,你的A,B和C总是有相同的长度吗?竖起大拇指为优雅,但我不使用拉姆达。但它确实给了我一个如何使用Lodash实现相同功能的方向(几乎相同的功能)