Javascript 从数组转换为正确的对象格式
在将数组转换为对象时,我知道诸如spread运算符和Object.assign()之类的选项,但是,我很难确定如何将最终对象格式化为所需的格式 我的原始阵列如下所示:Javascript 从数组转换为正确的对象格式,javascript,arrays,object,Javascript,Arrays,Object,在将数组转换为对象时,我知道诸如spread运算符和Object.assign()之类的选项,但是,我很难确定如何将最终对象格式化为所需的格式 我的原始阵列如下所示: let propsArray = [ { id: '1' }, { 'name.first': 'john' }, { 'name.last': 'smith' } ] { "id" : 1, "name" : { "first" : "john", "last" : "smith"
let propsArray = [ { id: '1' },
{ 'name.first': 'john' },
{ 'name.last': 'smith' } ]
{
"id" : 1,
"name" : {
"first" : "john",
"last" : "smith"
}
}
我希望从该数据中获取的对象如下所示:
let propsArray = [ { id: '1' },
{ 'name.first': 'john' },
{ 'name.last': 'smith' } ]
{
"id" : 1,
"name" : {
"first" : "john",
"last" : "smith"
}
}
到目前为止,我尝试使用object.assign()在结果对象中添加数字作为属性键,这显然不是我想要的:
let finalObj = Object.assign({}, propsArray);
如何按此处所需的方式格式化生成的对象?您需要更深入地查看对象,使用拆分键,并通过使用具有属性的对象或空对象来减少它们。在末尾指定值
var data=[{id:'1'},{'name.first':'john'},{'name.last':'smith'}],
结果=数据。减少((r,o)=>{
Object.entries(o.forEach)([k,v])=>{
var keys=k.split('.'),
last=keys.pop();
reduce((q,k)=>q[k]=q[k]|{},r)[last]=v;
});
返回r;
}, {});
控制台日志(结果)代码>请尝试以下操作:
const数据=[
{
“id”:“1”
},
{
“名字。第一个”:“约翰”
},
{
“姓名。姓氏”:“史密斯”
}
]
const result=Object.entries(Object.assign({},…data))
.减少((根据[k,v])=>{
[first,last]=k.split('.');
如果(!last){
acc[k]=v
}否则{
acc[第一]=acc[第一]|{};
acc[第一次][最后一次]=v;
}
返回acc
}, {})
控制台日志(结果)如果控制初始数组结构,则将其更改为在每个对象中具有一致的键名会更简单。正如你从Nina的回答中所看到的,这不是小事,谢谢,但在我的例子中,我不能,因为数组每次都将由不同的元素组成。很好,但是如果你做一些像{propertyName:'id',value:1},{propertyName:'first.name',value:'john这样的事情,
它会大大降低复杂性。甚至从一开始就使用对象而不是数组