Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.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_Reactjs_Object_Socket.io - Fatal编程技术网

Javascript 读取状态数组

Javascript 读取状态数组,javascript,arrays,reactjs,object,socket.io,Javascript,Arrays,Reactjs,Object,Socket.io,我有两个文件Server.js和Servicedesk.js,我使用socket.io和ReactJS。 我想比较Server.js(我的socket.io文件)中的数组与Servicedesk.js中的数组。在Servicedesk.js中,我有以下代码: class Servicedesk extends React.Component { constructor(props) { super(props); this.state = {

我有两个文件Server.js和Servicedesk.js,我使用socket.io和ReactJS。 我想比较Server.js(我的socket.io文件)中的数组与Servicedesk.js中的数组。在Servicedesk.js中,我有以下代码:

class Servicedesk extends React.Component {
    constructor(props) {
        super(props);    

    this.state = {
       messages: [],
    };

    socket.on('updateRooms', function(combMessages) {
            console.log(combMessages.length);
            console.log(this.state.messages.length);

            let intersection = combMessages.filter(x => this.state.messages.includes(x));
            console.log(intersection);
    });
  }
}
在Server.js中:

let combMessages = [];
我正在将消息传递到Servicedesk.js,但是如何比较这两个消息?因为我不能做这样的事情:

let intersection = combMessages.filter(x => this.state.messages.includes(x));
因为我得到了这个错误:

TypeError:undefined不是对象(计算'this.state.messages')
socket.on()
中,您的

 function(combMessages) { 
     console.log(combMessages.length); 
     console.log(this.state.messages.length); 
     let intersection = combMessages.filter(x => this.state.messages.includes(x)); 
     console.log(intersection); 
}

无法查看组件的上下文。因此,您应该使用
箭头函数
,它将上下文绑定到您的函数,如下所示:

 socket.on('updateRooms',(combMessages) => {
     console.log(combMessages.length); 
     console.log(this.state.messages.length); 
     let intersection = combMessages.filter(x => this.state.messages.includes(x)); 
     console.log(intersection); 
 })

您能显示Servicedesk.js的完整代码吗?
lambda
函数作为参数传递给
combMessages.filter()
无法“找到”该
this.state.messages
,这就是错误的原因given@MatheusReis我已经更新了代码,可能是因为在“console.log(this.state.messages.length);”中调用时没有this.state.messages使用web浏览器的检查器来验证这一点。如果是这样,那么您只需要添加一个条件,如果(this.state.messages!=未定义)