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函数来实现它。