Javascript 如何从表示对象的对象创建多个对象的数组

Javascript 如何从表示对象的对象创建多个对象的数组,javascript,lodash,Javascript,Lodash,我想转换:{port:{0:23,1:22},协议:{0:http',1:''https'} 收件人:[{port:23,协议:'http'},{port:22,协议:'https'}] 我已经编写了手动执行的函数 有没有lodash函数可以做到这一点?或者操纵现有函数以获得所需结果?这可能是使用vanillajs的一种方法 将所有端口和协议映射到两个不同的阵列。 然后组合最终数组,从两个构建的数组中获取值。 这样,您将具有线性复杂性O(n) const a={port:{0:23,1:22}

我想转换:
{port:{0:23,1:22},协议:{0:http',1:''https'}

收件人:
[{port:23,协议:'http'},{port:22,协议:'https'}]

我已经编写了手动执行的函数


有没有lodash函数可以做到这一点?或者操纵现有函数以获得所需结果?

这可能是使用vanillajs的一种方法

将所有端口和协议映射到两个不同的阵列。 然后组合最终数组,从两个构建的数组中获取值。 这样,您将具有线性复杂性
O(n)

const a={port:{0:23,1:22},协议:{0:http',1:https};
常量端口=对象值(a.port);
const protocols=对象值(a.protocol);
const finalArr=ports.map((port,ind)=>({port,protocol:protocols[ind]}));

控制台日志(finalArr)您可以迭代来自对象的条目,并将内部键作为外部数组的键,反之亦然

var data={port:{0:23,1:22},协议:{0:“http”,1:“https”},
结果=对象。条目(数据)。减少((r,[k,o])=>{
Object.entries(o.forEach)([i,v])=>{
r[i]=r[i]|{};
r[i][k]=v;
});
返回r;
}, []);

控制台日志(结果)没有一个lodash函数可以实现这一点,但是您可以通过
创建一个函数来获得所需的结果

您可以将对象转换为包含标签和值的数组,
.unzip()
进行转置,然后使用
.zipObject()
映射到对象:

constobj={port:{0:23,1:22},协议:{0:http',1:https};
常数fn=u0.flow([
o=>\.map(o,(v,k)=>[k,…\.values(v)],//转换为标签数组,…值
_.unzip,//转置
([labels,…values])=>\.map(values,v=>\.zipObject(labels,v))//创建项目
]);
常数结果=fn(obj);
控制台日志(结果)

您指望的是酒店的名称。另外,我没有寻找实现,而是寻找一个现有的lib/lodash函数来实现它。@StavAlfi我确实使用了props,因为它看起来像是静态的对象。顺便说一句,还添加了一个loadash实现,它甚至不依赖于键名称。我没有寻找实现,而是寻找一个现有的lib/lodash函数来实现它。