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;
然后我将用户id和socketID作为键值对存储在一个数组中
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);}