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

时间:2017-11-17 09:53:11

标签: javascript arrays node.js sockets

客户代码

我正在使用

从客户端发送客户端的 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;

然后我将 userID socketID 存储在数组中作为键值对。

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 替换为新生成的。

这是我试过的没有运气的代码

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

if(checkKeyPair){
    console.log("Hello");
}else{
    keyPairArray.push(item);
    console.log(keyPairArray);
}

3 个答案:

答案 0 :(得分:3)

试试这个(如果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;
}

答案 1 :(得分:1)

您可以将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'));

答案 2 :(得分:0)



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');