我如何减少此代码的时间复杂度

时间:2019-05-08 11:15:58

标签: javascript arrays

let arr = [[{x: 1},{y: 2}],[{z: 3}]]

let objs = []
arr.forEach(innerArray => {
  innerArray.forEach(obj => {
    objs.push(obj)
  })
})

console.log(objs) // [{x:1}, {y:2},{z:3}]

我不想两次映射数组, 您能帮我找到更好的方法吗?

1 个答案:

答案 0 :(得分:7)

您可以使用Array.prototype.flat()

注意:以下所有方法都是替代方法,具有较高的速度。您的解决方案具有O(n)时间复杂度,并且以下所有方法都具有相同的时间复杂度。合并两个数组的时间复杂度是O(n)而不是O(1)

let arr = [[{x: 1},{y: 2}],[{z: 3}]]
let objs = arr.flat();
console.log(objs)

或者另一种方式是使用concat()reduce()

let arr = [[{x: 1},{y: 2}],[{z: 3}]]
let objs = arr.reduce((ac,a) => ac.concat(a),[])
console.log(objs)

在注释中建议的一个更好的主意是使用apply()

let arr = [[{x: 1},{y: 2}],[{z: 3}]]
let objs = [].concat.apply([], arr)
console.log(objs)