Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Node.js_Sockets - Fatal编程技术网

Javascript 检查数组中是否存在键并替换其值

Javascript 检查数组中是否存在键并替换其值,javascript,arrays,node.js,sockets,Javascript,Arrays,Node.js,Sockets,客户端代码 let token = socket.handshake.query.token; 我正在使用从客户端发送客户端的id var socket = io.connect('http://localhost:8080?token='+userID); 并在myio.on('connection')中将其放到服务器上 功能使用 服务器代码 let token = socket.handshake.query.token; 现在,我将用户id存储在变量令牌中 此外,我正在获取已连接的套

客户端代码

let token = socket.handshake.query.token;
我正在使用从客户端发送客户端的id

var socket = io.connect('http://localhost:8080?token='+userID);
并在myio.on('connection')中将其放到服务器上 功能使用

服务器代码

let token = socket.handshake.query.token;
现在,我将用户id存储在变量令牌中

此外,我正在获取已连接的套接字id,并将其存储为

var id = socket.id;
然后我将用户idsocketID作为键值对存储在一个数组中

var item = {};
item[token] = id;
这是我将其推入的数组(该数组在on connection函数外部声明)

当两个人连接在一起时,我得到一个这样的数组

[ { '10': 'HvlunYNFCcF5vK0-AAAA' },
  { '1456': '17XF7mbh4vYr2WUSAAAB' } ]
但是,当任何用户重新加载页面时,数组会像

[ { '10': 'HvlunYNFCcF5vK0-AAAA' },
  { '1456': '17XF7mbh4vYr2WUSAAAB' },
  { '1456': 'tIhvkxFbSSAQEckWAAAC' } ]
相同的用户Id但不同的套接字Id

每次用户重新加载页面或在另一个选项卡中打开页面时,套接字id都会更改,并且相同的用户id会以不同的套接字id添加到数组中

我不想再次插入同一个用户。如果用户重新加载页面,我希望它检查数组中的键userId,并用新生成的替换旧的套接字id

这是我尝试的代码,但没有成功

var checkKeyPair = keyPairArray.some(function(item){
    return item[token] === id;
});

if(checkKeyPair){
    console.log("Hello");
}else{
    keyPairArray.push(item);
    console.log(keyPairArray);
}
您可以结合来检查是否有具有给定userId的用户,如下所示:

const用户=[{
“10”:“HvlunYNFCcF5vK0 AAAA”
},
{
“1456”:“17xf7mbh4vyr2wusaab”
}
];
函数checkIfUserExists(userId){
返回users.some((user)=>Object.keys(user.indexOf(userId)>-1)
}
log(checkIfUserExists('10'));
log(checkIfUserExists('11'))尝试此方法(如果ES6不是问题):

let token=socket.handshake.query.token;
var id=socket.id;
var item={[token]:id};
var index=keyPairArray.findIndex(it=>Object.keys(it)[0]==token);
如果(索引==-1){
按键式(物品);
}否则{
keyPairArray[索引]=项目;
}
var用户=[{
“10”:“HvlunYNFCcF5vK0 AAAA”
},
{
“1456”:“17xf7mbh4vyr2wusaab”
}
];
函数saveUser(newUserId){
users.forEach(函数(键){
if(Object.keys(key)[0]==newUserId)
log('user exists');
否则{
var item={};
项目[newUserId]=“FSDFSDGDFHGF55665HFTGH56”;
用户。推送(项目);
}
});
}

saveUser('1456')如果要将每个项目与所有其他项目进行比较,则需要进行嵌套搜索。这很有效。当我记录它的时候,我正在变得真实。我可以在那之后执行操作。请解释您修复了什么。我可以将相同的代码放入我的
中吗?断开
功能并替换
。用
推压
。剪接
,并在用户断开连接时从阵列中移除用户对象。不,您不能。如果您只是将push替换为拼接,那么它将不起作用。您必须执行以下操作:if(index!=-1){keyPairArray.splice(index,1);}