1

我有一个这样的对象数组:

myArr = [
    { "id": "aaa.bbb" },
    { "id": "aaa.ccc" },
    { "id": "111.222" },
    { "id": "111.333" },
]

我的目标是能够为 Id 的每个部分创建一个新数组,同时嵌套旧数组。像这样:

newArray = [
    {
      "id": "aaa",
      "children": [{ "id": "aaa.bbb" }] 
    },
    {
      "id": "aaa",
      "children": [{ "id": "aaa.ccc" }] 
    },
    {...}
]

如果有一个更大的 Id,这个想法是能够用多个子字符串来做

4

2 回答 2

3

您可以使用 map 遍历数组并就地改变对象

myArr = [ { "id": "aaa.bbb" }, { "id": "aaa.ccc" }, { "id": "111.222" }, { "id": "111.333" }, ]
result=myArr.map((o)=>({["id"]:o.id.split(".")[0],["children"]:[o]}))
console.log(result)

或者你可以使用 reduce

myArr = [ { "id": "aaa.bbb" }, { "id": "aaa.ccc" }, { "id": "111.222" }, { "id": "111.333" }, ]
result=myArr.reduce((acc,curr)=>acc=[...acc,{["id"]:curr.id.split(".")[0],["children"]:[curr]}],[])
console.log(result)

于 2020-07-15T01:15:29.583 回答
2

使用Array.prototype.map.

const newArray = myArr.map( function( e ) {

    const oldId = e.id;    
    const newElement = {
        id: oldId.split( '.' )[0],
        children: [ e ]
    };
    return newElement
} );

简化:

const newArray = myArr.map( function( e ) {
    return {
        id: e.id.split( '.' )[0],
        children: [ e ]
    };
} );

更远:

const newArray = myArr.map( e => { id: e.id.split( '.' )[0], children: [ e ] } );
于 2020-07-15T01:14:25.297 回答