Javascript 如何降低此代码的时间复杂性
Javascript 如何降低此代码的时间复杂性,javascript,arrays,Javascript,Arrays,让arr=[[{x:1},{y:2}],{z:3}]] 让objs=[] arr.forEach(innerArray=>{ innerArray.forEach(obj=>{ objs.push(obj) }) }) console.log(objs)/[{x:1},{y:2},{z:3}]您可以使用Array.prototype.flat() 注意:以下所有方法都是高速的可选方法。您的解决方案具有O(n)时间复杂度,以下所有方法具有相同的时间复杂度。合并两个数组的时间复杂度是O(n)而不是O
让arr=[[{x:1},{y:2}],{z:3}]]
让objs=[]
arr.forEach(innerArray=>{
innerArray.forEach(obj=>{
objs.push(obj)
})
})
console.log(objs)/[{x:1},{y:2},{z:3}]
您可以使用Array.prototype.flat()
注意:以下所有方法都是高速的可选方法。您的解决方案具有O(n)
时间复杂度,以下所有方法具有相同的时间复杂度。合并两个数组的时间复杂度是O(n)
而不是O(1)
让arr=[[{x:1},{y:2}],{z:3}]]
设objs=arr.flat();
console.log(objs)
是使数组平坦化的目标吗?这方面的时间复杂度几乎是固定的,但是如果速度是问题,那么使用尽可能多的浏览器内置函数,如array.flat
,将是最好的选择。很好的答案可能重复!我甚至会删除我的hahahow:[].concat.apply([],arr)
可能值得指出,这并不会改变时间复杂性。因为以上这些都不能改变这一点!!。但话说回来,也许OP只是指最快的…)@基思:我不知道什么是flat()
。但我认为reduce()
和concat()
方法将复杂性从O(n*m)
更改为O(n)
,因为在原始解决方案中OP推动每个元素,但在concat()
中,我认为整个数组不会再次迭代。@Maherali甚至原始解决方案也是O(n)
。或者O(m*n)
取决于您如何看待它。您只需在每个数组元素上遍历一次,在每个对象上遍历一次。因此,总的来说,您对每个对象都有一个单独的运行——<代码> O(n)< /代码>,但是如果您想考虑在顶级数组上运行的话,则是<代码> o(m*n)< /代码>。code>.flat()
将具有相同的性能特征,因为它基本上需要执行相同的操作-运行每个元素并将每个子数组的每个元素拉入一个。它可能会快一点,因为它可以更好地优化。它不可能有不同的时间复杂度。