Javascript 使用就地concat有什么缺点吗?
有时我会对Javascript 使用就地concat有什么缺点吗?,javascript,arrays,implementation,concat,in-place,Javascript,Arrays,Implementation,Concat,In Place,有时我会对Array.prototype.concat的内存需求感到恼火,因为它没有执行到位并返回一个新数组,而不是将参数中传递的数组实际连接到调用实例concat,就像名称在逻辑上暗示的那样 假设与其他库的合作不是问题,那么像这样重新实现它会有任何缺点(性能、长度限制减少等) Array.prototype.concat = function (array) { this.push.apply(this, array); return this; }; 相反,这种替代实现是
Array.prototype.concat
的内存需求感到恼火,因为它没有执行到位并返回一个新数组,而不是将参数中传递的数组实际连接到调用实例concat
,就像名称在逻辑上暗示的那样
假设与其他库的合作不是问题,那么像这样重新实现它会有任何缺点(性能、长度限制减少等)
Array.prototype.concat = function (array) {
this.push.apply(this, array);
return this;
};
相反,这种替代实现是否真的会将辅助内存使用量减少到O(1),或者某种内部机制会将其保持在O(n)?您来自哪种语言?其中“名称
concat
在逻辑上意味着对参数进行变异”?确实,您已经因为使用.concat
而耗尽了内存?我简直不敢相信。您的应用程序是什么?至少,您不应该将此新实现命名为.concat
。与其说是使用,不如说是使用。@Bergi关于你的第二个评论,我不是“内存不足”,而是认为它需要O(n)个辅助内存,因为它实际上创建了前两个数组的副本来构造新数组,在大多数情况下,我只是放弃了对前一个数组的引用,这使得复制只是浪费时间和资源。我们不会称之为“辅助内存”,因为它更像是结果内存。我确信引擎可以很好地优化这一点。通常情况下,您不会受到时间或资源的压力。您来自哪种语言?名称concat
在逻辑上意味着对参数进行变异?确实,由于使用.concat
,您的内存已用完?我简直不敢相信。您的应用程序是什么?至少,您不应该将此新实现命名为.concat
。与其说是使用,不如说是使用。@Bergi关于你的第二个评论,我不是“内存不足”,而是认为它需要O(n)个辅助内存,因为它实际上创建了前两个数组的副本来构造新数组,在大多数情况下,我只是放弃了对前一个数组的引用,这使得复制只是浪费时间和资源。我们不会称之为“辅助内存”,因为它更像是结果内存。我确信引擎可以很好地优化这一点。通常你没有时间或资源压力。