我有一个类似下面的JSON对象:
var users = {
ross: [
{
socket_id: 'K7XhUcIXAQFkmhK7AAAA',
community_id: 2
},
{
socket_id: 'gWBy0adi2e3KoIWuAAAC',
community_id: 2
},
{
socket_id: 'PRQ2czNZuvatsy8cAAAD',
community_id: 2
},
{
socket_id: 'R-EGVCDc5jWQV50KAAAF',
community_id: 2
}
],
laura: [
{
socket_id: 'VCp2NxY42LMNvOclAAAE',
community_id: 2
},
{
socket_id: 'MDZe6Oe8U4xzmUjxAAAG',
community_id: 2
}
],
john: [
{
socket_id: 'Omn3VQKyuYHm2JNdAAAH',
community_id: 2
}
]
}
现在当socket断开连接时,我想从该用户的数组中删除该套接字对象。现在我编写了一个从Json数组中删除Json对象的函数。
var cleaner= function(arr, id) {
for (var i = 0; i < users.length; i++) {
var cur = users[i];
if (cur.id === id) {
arr.splice(i, 1);
break;
}
}
};
cleaner(users, socket.id);
上述功能的唯一问题是我需要传递JSON数组所属的密钥的名称。
基本上,首先我要找到该JSON数组的密钥名称,当我获得密钥名称时,我会将其传递给清除功能。 但我不知道如何找到JSON数组的密钥名称。
答案 0 :(得分:2)
使用给定的结构,您需要遍历对象的键,然后遍历内部的数组。
var users = { ross: [{ socket_id: 'K7XhUcIXAQFkmhK7AAAA', community_id: 2 }, { socket_id: 'gWBy0adi2e3KoIWuAAAC', community_id: 2 }, { socket_id: 'PRQ2czNZuvatsy8cAAAD', community_id: 2 }, { socket_id: 'R-EGVCDc5jWQV50KAAAF', community_id: 2 }], laura: [{ socket_id: 'VCp2NxY42LMNvOclAAAE', community_id: 2 }, { socket_id: 'MDZe6Oe8U4xzmUjxAAAG', community_id: 2 }], john: [{ socket_id: 'Omn3VQKyuYHm2JNdAAAH', community_id: 2 }] },
cleaner = function (object, socket_id) {
Object.keys(object).some(function (k) {
return object[k].some(function (a, i, aa) {
if (a.socket_id === socket_id) {
aa.splice(i, 1);
return true;
}
});
});
};
cleaner(users, 'PRQ2czNZuvatsy8cAAAD');
console.log(users);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
使用Array#filter
删除多个方法。
var users = { 'abc@xyz.in': [ { socket_id: '4MIPKfkcitCV9xp6AAAA', community_id: 8 }, { socket_id: '4MIPKfkcitCV9xp6AAAA', community_id: 9 } ] } ,
cleaner = function (object, socket_id) {
Object.keys(object).forEach(function (k) {
var temp = object[k].filter(function (a) {
return a.socket_id !== socket_id;
});
if (object[k].length !== temp.length) {
object[k] = temp;
}
});
};
cleaner(users, '4MIPKfkcitCV9xp6AAAA');
console.log(users);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:1)
试试这个(用你的for循环替换它):
for(var i in users)
{
name = i;
array = users[i]
}