Deep Flatten JavaScript Object Recursively

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

Data:

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


        
14条回答
  •  失恋的感觉
    2021-02-18 21:02

    A shorter solution using reduce and recursion

    function flatten(data){
      return data.reduce(function(result,next){
        result.push(next);
        if(next.items){
          result = result.concat(flatten(next.items));  
          next.items = [];
        }
        return result;
      },[]);
    }
    
    var data = [
        {
          "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
                }
              ]
            }
          ]
        }
      ];
    
    var result = flatten(data);
    
    document.write('
    ' + JSON.stringify(result, 0, 4) + '
    ');

提交回复
热议问题