[英]Check if key exists in an array and replace its value
客户代码
我正在使用从客户端发送客户端的ID
var socket = io.connect('http://localhost:8080?token='+userID);
并使用io.on('connection')函数在服务器上获取它
服务器代码
let token = socket.handshake.query.token;
所以现在我将userID存储在变量令牌中 。
我也得到了连接的套接字ID并将其存储为
var id = socket.id;
然后,我将用户ID和套接字ID作为键值对存储在数组中。
var item = {};
item[token] = id;
这是我正在将其推入的数组(该数组在on连接函数外部声明)
keyPairArray.push(item);
所以当两个人连接在一起时,我得到的是这样的数组。
[ { '10': 'HvlunYNFCcF5vK0-AAAA' },
{ '1456': '17XF7mbh4vYr2WUSAAAB' } ]
但是,当任何用户重新加载页面时,数组都会像
[ { '10': 'HvlunYNFCcF5vK0-AAAA' },
{ '1456': '17XF7mbh4vYr2WUSAAAB' },
{ '1456': 'tIhvkxFbSSAQEckWAAAC' } ]
相同的用户ID,但不同的套接字ID 。
每次用户重新加载页面或在另一个选项卡中打开页面时, 套接字ID都会更改,并且同一UserID将使用不同的套接字ID追加到数组中。
我不想再次插入同一用户。 如果用户重新加载页面,我希望它检查数组中的键userId并将旧的套接字ID替换为新生成的套接字ID 。
这是我没有运气尝试的代码
var checkKeyPair = keyPairArray.some(function(item){
return item[token] === id;
});
if(checkKeyPair){
console.log("Hello");
}else{
keyPairArray.push(item);
console.log(keyPairArray);
}
尝试以下操作(如果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);
if (index === -1) {
keyPairArray.push(item);
} else {
keyPairArray[index] = item;
}
您可以将Array#some
与Object.keys
结合使用,以检查是否存在具有给定userId的用户,如下所示:
const users = [{ '10': 'HvlunYNFCcF5vK0-AAAA' }, { '1456': '17XF7mbh4vYr2WUSAAAB' } ]; function checkIfUserExists(userId) { return users.some((user) => Object.keys(user).indexOf(userId) > -1) } console.log(checkIfUserExists('10')); console.log(checkIfUserExists('11'));
var users = [{ '10': 'HvlunYNFCcF5vK0-AAAA' }, { '1456': '17XF7mbh4vYr2WUSAAAB' } ]; function saveUser(newUserId) { users.forEach(function(key) { if (Object.keys(key)[0] == newUserId) console.log('user exists'); else { var item = {}; item[newUserId] = 'fsdfsdgdfsgdfhgf55665hftgh56'; users.push(item); } }); } saveUser('1456');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.