Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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-concat()的作用类似于push()_Javascript_Node.js_Electron - Fatal编程技术网

Javascript-concat()的作用类似于push()

Javascript-concat()的作用类似于push(),javascript,node.js,electron,Javascript,Node.js,Electron,我有多个字节数组,每个数组的长度为10000000(10MB)。我将它们存储在这个对象中 class object{ var buffer = new Array(); updateBuffer(buffer){ this.buffer = this.buffer.concat(buffer); } } 每次收到新的字节数组时(大约15次),我都会调用该方法。我希望object.buffer.length的结果是~150MB,但输出是15。如果我尝试这样

我有多个字节数组,每个数组的长度为10000000(10MB)。我将它们存储在这个对象中

class object{
    var buffer = new Array();
    updateBuffer(buffer){
        this.buffer = this.buffer.concat(buffer);
    }
}

每次收到新的字节数组时(大约15次),我都会调用该方法。我希望
object.buffer.length
的结果是~150MB,但输出是15。如果我尝试这样做
object.buffer[0]。lenght
输出是10MB,因此
concat()
充当
push()
。你知道为什么吗?

我想你每次收到一个新包时都会创建一个
对象的实例!因此,每次都会创建一个新对象,从而创建一个新的
缓冲区
数组

您必须在计时器(接收器)块外部创建
对象的实例
,并在收到每个包后使用它



同样,使用console(
console.log(buffer)
)或其他方式检查
buffer
参数。这可能类似于
[[byte1,b2,b3]]
而不是
[byte1,b2,b3]
,这会导致长度=15。

我认为您应该验证那些
缓冲区
对象的外观是否与您认为的一样。如果每个数组都是嵌套在另一个数组中的数组,那么您所描述的就有意义了。您提供的代码不是有效的javascript@是的,你是对的,这会更有意义,但它们实际上是数组。只需使用
buffer.length
(10MB)进行验证@Olian04是的,你只是没有为这个对象创建一个实例,它实际上创建了一个矩阵,正如我说的,它的行为就像一个数组。这不是多个实例的问题,因为即使收到第一个包,也会发生此问题。矩阵如下所示:
[[10MB],[10MB],[10MB]
,而我应该有一个类似于:
[150MB]
的数组。我的答案的第二部分描述了这个问题。如果
buffer
参数类似于
[[b1,b2,…]]
,那么结果将是:
[[…],…],…],…]
,因此长度将等于15(类似于
推送
)。在这种情况下,您可以这样更改代码:
this.buffer=this.buffer.concat.apply(this.buffer,buffer)