Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何降低此代码的时间复杂性_Javascript_Arrays - Fatal编程技术网

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()
将具有相同的性能特征,因为它基本上需要执行相同的操作-运行每个元素并将每个子数组的每个元素拉入一个。它可能会快一点,因为它可以更好地优化。它不可能有不同的时间复杂度。