将对象内的多个数组合并为单个数组

我的对象包含不同的数据类型,包括数组。我想连接我使用 foreach 和 concat 编写的所有数组(在一个数组中)。

有什么办法可以有更好的解决方案,或者这是正确的?

请参阅下面的片段。将数组 value3 和 value5 连接成单个数组。

var Input = {

    "value1": 10,

    "value2": "abcd",

    "value3": [

        {

            "v1": 100,

            "v2": 89

        },

        {

            "v1": 454,

            "v2": 100

        }

    ],

    "value4": "xyz",

    "value5": [

        {

            "v6": 1,

            "v7": -8

        },

        {

            "v1": 890,

            "v2": 10

        }

    ]

}


   

var OutputData = [];

  let keys = Object.keys(Input);

  keys.forEach(key => {

    if (Array.isArray(Input[key])) {

      try {

        OutputData= OutputData.concat(Input[key])

      } catch (error) {

      }

    }

  });

  

console.log(OutputData)


青春有我
浏览 101回答 2
2回答

眼眸繁星

您可以使用Array.prototype.filter()withArray.prototype.flat()方法获得更清晰的代码。首先使用方法获取所有值Object.values()。然后使用filter方法获取数组,最后使用flat方法获取所有子数组元素连接起来的新数组。const input = {  value1: 10,  value2: 'abcd',  value3: [    {      v1: 100,      v2: 89,    },    {      v1: 454,      v2: 100,    },  ],  value4: 'xyz',  value5: [    {      v6: 1,      v7: -8,    },    {      v1: 890,      v2: 10,    },  ],};const ret = Object.values(input)  .filter((x) => Array.isArray(x))  .flat();console.log(ret);

浮云间

我认为读起来可能会更清晰一些:var input = {  "value1": 10,  "value2": "abcd",  "value3": [{      "v1": 100,      "v2": 89    },    {      "v1": 454,      "v2": 100    }  ],  "value4": "xyz",  "value5": [{      "v6": 1,      "v7": -8    },    {      "v1": 890,      "v2": 10    }  ]};let res = [];for (let k in input) {  if (input.hasOwnProperty(k) && Array.isArray(input[k]))    input[k].forEach(x => res.push(x));}console.log(res);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript