在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;i console.log(myCollection)代码>请共享您尝试过的代码。还有一些细节是需要的,你的A,B和C总是有相同的长度吗?竖起大拇指为优雅,但我不使用拉姆达。但它确实给了我一个如何使用Lodash实现相同功能的方向(几乎相同的功能)