检查 Javascript 嵌套 obj 值是否存在且键未知
Check Javascript nested obj value exists with unknown key
以下用于构建对象数组:
var users = {};
var user = {};
user[socket.id] = data.username;
if(users[data.roomname]){
// Room already exists - check user already exists
// if data.username does not value exist is users then:
users[data.roomname].push(user);
}
else{
// New room
users[data.roomname] = [user];
}
经过几次迭代,我们得到如下结果:
console.log ( 'Users: ', users );
users { RoomABC:
[ { YidwzgUHPHEGkQIPAAAD: 'Mr Chipps' },
{ 'JG-gtBMyPm0C1Hi1AAAF': 'Mr T' },
{ '2JFGMEdPbgjTgLGVAAAH': 'Mr Chipps' }, ] }
该问题试图确保每个用户名都是唯一的,因此如果该名称已经存在,则不应再次添加 Mr Chipps
。
我见过的例子假设密钥是已知的。我尝试了很多方法,包括 some
、indexOf
,但我无法让简单的 'does UserX already exist' 工作。
以下是最新的代码块,我尝试仅在 obj 数组中不存在的情况下添加用户。这行得通,但对我来说似乎很笨重;嵌套循环以获得正确的级别以检查值并在找到匹配项时设置计数器,然后检查计数器以确定是否找到匹配项:
if(users[data.roomname]){
// Room already exists - check user already exists
let found = 0;
// Nested loop - seems a little clunky but it works
Object.keys(users[data.roomname]).forEach(key => {
Object.keys(users[data.roomname][key]).forEach(key2 => {
if ( users[data.roomname][key][key2] === data.username ) {
found++;
}
});
});
if ( found == 0 ) {
users[data.roomname].push(user);
}
}
我一直在想肯定有一个简洁的单行程序可以检查是否存在,但我无法工作。
您可以检查值而不是使用键,如果找到名称则提前退出
if (users[data.roomname]) {
if (!Object.values(users[data.roomname]).some(v => Object.values(v).some(n => n === data.username))) {
users[data.roomname].push(user);
}
}
以下用于构建对象数组:
var users = {};
var user = {};
user[socket.id] = data.username;
if(users[data.roomname]){
// Room already exists - check user already exists
// if data.username does not value exist is users then:
users[data.roomname].push(user);
}
else{
// New room
users[data.roomname] = [user];
}
经过几次迭代,我们得到如下结果:
console.log ( 'Users: ', users );
users { RoomABC:
[ { YidwzgUHPHEGkQIPAAAD: 'Mr Chipps' },
{ 'JG-gtBMyPm0C1Hi1AAAF': 'Mr T' },
{ '2JFGMEdPbgjTgLGVAAAH': 'Mr Chipps' }, ] }
该问题试图确保每个用户名都是唯一的,因此如果该名称已经存在,则不应再次添加 Mr Chipps
。
我见过的例子假设密钥是已知的。我尝试了很多方法,包括 some
、indexOf
,但我无法让简单的 'does UserX already exist' 工作。
以下是最新的代码块,我尝试仅在 obj 数组中不存在的情况下添加用户。这行得通,但对我来说似乎很笨重;嵌套循环以获得正确的级别以检查值并在找到匹配项时设置计数器,然后检查计数器以确定是否找到匹配项:
if(users[data.roomname]){
// Room already exists - check user already exists
let found = 0;
// Nested loop - seems a little clunky but it works
Object.keys(users[data.roomname]).forEach(key => {
Object.keys(users[data.roomname][key]).forEach(key2 => {
if ( users[data.roomname][key][key2] === data.username ) {
found++;
}
});
});
if ( found == 0 ) {
users[data.roomname].push(user);
}
}
我一直在想肯定有一个简洁的单行程序可以检查是否存在,但我无法工作。
您可以检查值而不是使用键,如果找到名称则提前退出
if (users[data.roomname]) {
if (!Object.values(users[data.roomname]).some(v => Object.values(v).some(n => n === data.username))) {
users[data.roomname].push(user);
}
}