Javascript 如何使用纯JS更改对象结构

Javascript 如何使用纯JS更改对象结构,javascript,javascript-objects,Javascript,Javascript Objects,我正在努力改变对象的结构。 我想从以下位置转换对象: var data = { "a1.img": 'img1', "a1.href": 'href1', "a2.img": 'img2', "a2.href": 'href2', "a3.img": 'img3', "a3.href" : 'href3' }; 为此: var data = { "a1":{ "img": "img1", "href": "href1" }, "a2

我正在努力改变对象的结构。 我想从以下位置转换对象:

var data = {
  "a1.img": 'img1',
  "a1.href": 'href1',
  "a2.img": 'img2',
  "a2.href": 'href2',
  "a3.img": 'img3',
  "a3.href" : 'href3'
};
为此:

var data = {
  "a1":{    
    "img": "img1",
    "href": "href1" 
  },
  "a2":{    
    "img": "img2",
    "href": "href2" 
  },
  "a3":{    
    "img": "img3",
    "href": "href3"
  }
}
我的解决方案不能正常工作,我不知道如何修复它。我的解决方案:

风险值数据={ a1.img:“img1”, a1.href:“href1”, a2.img:“img2”, a2.href:'href2', a3.img:“img3”, a3.href:“href3” }; var newData={}; 用于var键入数据{ newData[key.split'.[0]={}; 对于数据中的var i{ newData[key.split'.[0]][i.split'.[1]]=data[key] } } console.lognewData您可以使用Arrayreduce在原始数组上循环,并将属性附加到累加器

风险值数据={ a1.img:“img1”, a1.href:“href1”, a2.img:“img2”, a2.href:'href2', a3.img:“img3”, a3.href:“href3” }; var res=Object.entriesdata.reducea[k,v]=>{ var[key,prop]=k.split'; 如果!a[钥匙]{ a[键]={}; } a[键][prop]=v; 返回a; }, {};
console.logres;只需将重复目标中的替换为。作为分隔符。谢谢!我找不到类似的解决方案谢谢!您的解决方案看起来非常棒和简单。现在我将一步一步地重复所有的事情,以便完全理解它!我必须学习如何使用reduce方法。这个建议只适用于带单点的字符串。@NinaScholz-是的,这是真的。这是不可伸缩的。这个问题的答案和OP想做的差不多。