Deep Flatten JavaScript Object Recursively

后端 未结 14 2228
囚心锁ツ
囚心锁ツ 2021-02-18 20:34

Data:

var data = [
    {
      \"id\": 1,
      \"level\": \"1\",
      \"text\": \"Sammy\",
      \"type\": \"Item\",
      \"items\": [
               


        
14条回答
  •  青春惊慌失措
    2021-02-18 21:19

    Here is solution using recursive function which I called flattenNestedObjectsArray()(for native JavaScript):

    function flattenNestedObjectsArray(arr, part){
        var flattened = part || [], items;
        arr.forEach(function(v){
            if (Array.isArray(v.items) && v.items.length) {
                items = v.items;
                v.items = [];
                flattened.push(v);
                flattened.concat(flattened, flattenNestedObjectsArray(items, flattened));                
            } else {
                flattened.push(v);
            }        
        });
        return flattened;
    }
    
    var flattened = flattenNestedObjectsArray(data);
    console.log(JSON.stringify(flattened, 0, 4));
    

    The console.log output:

    [
        {
            "id": 1,
            "level": "1",
            "text": "Sammy",
            "type": "Item",
            "items": []
        },
        {
            "id": 11,
            "level": "2",
            "text": "Table",
            "type": "Item",
            "items": []
        },
        {
            "id": 111,
            "level": "3",
            "text": "Dog",
            "type": "Item",
            "items": null
        },
        {
            "id": 112,
            "level": "3",
            "text": "Cat",
            "type": "Item",
            "items": null
        },
        {
            "id": 12,
            "level": "2",
            "text": "Chair",
            "type": "Item",
            "items": []
        },
        {
            "id": 121,
            "level": "3",
            "text": "Dog",
            "type": "Item",
            "items": null
        },
        {
            "id": 122,
            "level": "3",
            "text": "Cat",
            "type": "Item",
            "items": null
        },
        {
            "id": 2,
            "level": "1",
            "text": "Sundy",
            "type": "Item",
            "items": []
        },
        {
            "id": 21,
            "level": "2",
            "text": "MTable",
            "type": "Item",
            "items": []
        },
        {
            "id": 211,
            "level": "3",
            "text": "MTDog",
            "type": "Item",
            "items": null
        },
        {
            "id": 212,
            "level": "3",
            "text": "MTCat",
            "type": "Item",
            "items": null
        },
        {
            "id": 22,
            "level": "2",
            "text": "MChair",
            "type": "Item",
            "items": []
        },
        {
            "id": 221,
            "level": "3",
            "text": "MCDog",
            "type": "Item",
            "items": null
        },
        {
            "id": 222,
            "level": "3",
            "text": "MCCat",
            "type": "Item",
            "items": null
        },
        {
            "id": 3,
            "level": "1",
            "text": "Bruce",
            "type": "Folder",
            "items": []
        },
        {
            "id": 31,
            "level": "2",
            "text": "BTable",
            "type": "Item",
            "items": []
        },
        {
            "id": 311,
            "level": "3",
            "text": "BTDog",
            "type": "Item",
            "items": null
        },
        {
            "id": 312,
            "level": "3",
            "text": "BTCat",
            "type": "Item",
            "items": null
        },
        {
            "id": 32,
            "level": "2",
            "text": "Chair",
            "type": "Item",
            "items": []
        },
        {
            "id": 321,
            "level": "3",
            "text": "BCDog",
            "type": "Item",
            "items": null
        },
        {
            "id": 322,
            "level": "3",
            "text": "BCCat",
            "type": "Item",
            "items": null
        }
    ]
    

提交回复
热议问题