从JSON数组中查找和删除json对象

时间:2017-04-10 07:14:07

标签: javascript arrays json sockets

我有一个类似下面的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数组的密钥名称。

2 个答案:

答案 0 :(得分:2)

使用给定的结构,您需要遍历对象的键,然后遍历内部的数组。

&#13;
&#13;
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;
&#13;
&#13;

使用Array#filter删除多个方法。

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:1)

试试这个(用你的for循环替换它):

for(var i in users)
{
     name = i;
     array = users[i]
}