为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

青春有我 2023-10-14 16:50:27
我的对象包含不同的数据类型,包括数组。我想连接我使用 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)
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

您可以使用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);


查看完整回答
反对 回复 2023-10-14
?
浮云间

TA贡献1829条经验 获得超4个赞

我认为读起来可能会更清晰一些:


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);


查看完整回答
反对 回复 2023-10-14
  • 2 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信