【问题标题】:How to convert nested object into an array in javascript?如何在javascript中将嵌套对象转换为数组?
【发布时间】:2017-05-16 14:41:13
【问题描述】:

我有一个包含多个对象的数组。在这个数组中,每个对象都有两个或多个子对象。我想将所有子对象汇集到一个数据数组中。 javascript怎么办?

var array1 = [
  {
    "dfgasg24":{
      name:"a",
      id:1
    },
    "dfgare24":{
      name:"b",
      id:2
    }
  },
  {
    "wegasg24":{
      name:"ab",
      id:76
    },
    "yugasg24":{
      name:"bc",
      id:34
    },
    "yugasg26":{
      name:"dc",
      id:45
    }
  }
]

我想要的输出是这样的,

var result = [
    {
        name:"a",
        id:1
    },
    {
        name:"b",
        id:2
    },
    {
        name:"ab",
        id:76
    },
    {
        name:"bc",
        id:34
    },
    {
        name:"dc",
        id:45
    }
];

【问题讨论】:

    标签: javascript jquery arrays lodash


    【解决方案1】:

    您可以使用组合方法迭代数组和键来构建平面数组。

    var array = [{ "dfgasg24": { name: "a", id: 1 }, "dfgare24": { name: "b", id: 2 } }, { "wegasg24": { name: "ab", id: 76 }, "yugasg24": { name: "bc", id: 34 }, "yugasg26": { name: "dc", id: 45 } }],
        result = array.reduce(function (r, o) {
            Object.keys(o).forEach(function (k) {
                r.push(o[k]);
            });
            return r;
        }, []);
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案2】:
      answer=[];
      for(elem of array){
      var arr=[];
       for(obj of elem){
         arr.push(obj);
       }
      answer.push(arr);
      }
      alert(answer);
      

      循环遍历主数组,并将每个元素替换为一个数组。

      【讨论】:

        【解决方案3】:

        使用_.values 获取对象值

        var res = _.flatMap(array1, _.values)
        

        【讨论】:

          【解决方案4】:

          此解决方案使用 spread syntaxarrow functions (ES6) 和 Object.values() (ECMAScript 2017),因此如果不进行转译,它将无法在旧浏览器上运行:

          const array = [{ "dfgasg24": { name: "a", id: 1 }, "dfgare24": { name: "b", id: 2 } }, { "wegasg24": { name: "ab", id: 76 }, "yugasg24": { name: "bc", id: 34 }, "yugasg26": { name: "dc", id: 45 } }];
          
          const result = [].concat(...array.map(Object.values));
          
          console.log(result);

          如果所有对象的键都是唯一的,您还可以使用Object.assign() 将所有对象组合成一个对象,然后使用Object.values() 将值提取到一个数组中:

          const array = [{ "dfgasg24": { name: "a", id: 1 }, "dfgare24": { name: "b", id: 2 } }, { "wegasg24": { name: "ab", id: 76 }, "yugasg24": { name: "bc", id: 34 }, "yugasg26": { name: "dc", id: 45 } }];
          
          const result = Object.values(Object.assign({}, ...array));
          
          console.log(result);

          【讨论】:

            猜你喜欢
            • 2018-01-24
            • 2016-04-13
            • 1970-01-01
            • 1970-01-01
            • 2020-07-07
            • 2022-12-18
            • 1970-01-01
            • 2021-12-13
            • 1970-01-01
            相关资源
            最近更新 更多