繁体   English   中英

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

[英]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#someObject.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM