Javascript 从ObjectsLoop数组创建新对象

Javascript 从ObjectsLoop数组创建新对象,javascript,ecmascript-6,Javascript,Ecmascript 6,我想循环一个数组并创建/添加到另一个对象 let list=[ {id:1,父\u id:1,位置:“place1”,内容:“hello”}, {id:2,父_id:2,位置:“place2”,内容:“你好”}, {id:3,父\u id:1,位置:“place1”,内容:“hello”} ] 让newObjList={ 地点1:{}, 地点2:{} } list.forEach(i=>{ 让noteId=i.id 让parentId=i.parent\u id 让location=i.loca

我想循环一个数组并创建/添加到另一个对象

let list=[
{id:1,父\u id:1,位置:“place1”,内容:“hello”},
{id:2,父_id:2,位置:“place2”,内容:“你好”},
{id:3,父\u id:1,位置:“place1”,内容:“hello”}
]
让newObjList={
地点1:{},
地点2:{}
}
list.forEach(i=>{
让noteId=i.id
让parentId=i.parent\u id
让location=i.location==“place1”
?“地点1”:
i、 位置==“位置2”
?“place2”:空;
让existingKeyList=!!位置?对象.keys(newObjList[location]):[]
让existingKeySet=新集合(existingKeyList)
让listHasKey=existingKeySet.has(父ID)
如果(!listHasKey){
newObjList[itemType][parentId]={}
newObjList[itemType][parentId][noteId]=i
}否则{
newObjList[itemType][parentId][noteId]=i
}
})
最后,我希望新对象如下所示:

{
地点1:{
1:{id:1,父\ id:1,位置:“place1”,内容:“hello”},
3:{id:3,父\ id:1,位置:“place1”,内容:“hello”}
},
地点2:{
2:{id:2,父\父id:2,位置:“place2”,内容:“你好”}
}
}
我试图通过
forEach()
实现这一点,只是从我的newObjList中的数组返回最后一项。像这样:

newObjList: {
    place1: { 
        3: { id:3, parent_id: 1, location: "place1", content: "hello" }
    },
    place2: {}
}

关于如何实现所需结果,您有什么想法吗?

您可以使用
reduce
-功能来实现这一点

以下是一些资源:

下面是使用您的用例的示例

let list=[{id:1,父id:1,位置:“place1”,内容:“hello”},{id:2,父id:2,位置:“place2”,内容:“hello reach”},{id:3,父id:1,位置:“place1”,内容:“hello”}]
常量myObject=list.reduce((上一个,项)=>{
上一个[项目位置][项目id]=项目;
返回上一个;
},{place1:{},place2:{});

console.log(myObject)
您的目标的基本描述就是
.reduce()
方法的用途。谢谢!这非常有效,我感谢您提供的资源。很高兴这对您起到了作用:)如果您对解决方案感到满意,并且它能按预期工作,那么请将其标记为正确答案,以便其他人也能从中受益。