通过属性获取数组内的项目

时间:2018-12-23 15:25:03

标签: javascript arrays node.js

我想将Array.filter的输出分配给现有数组。

我正在使用nodejs套接字服务,并且我有一个如下结构的数组:

GROUPS = [{id:1,成员:['user1','user2',...]}];

我想删除一个在GROUPS上做地图的用户,

GROUPS.map((group) => {
    group.members.map((member) => {
        const connectedClients = Array.from(wss.clients);
        const userIsConnected = connectedClients.some(existingMember => existingMember.id === member.id);
        if (!userIsConnected) {
            console.log('member: ', member.userID); // userid: 12345678
            console.log('group_id: ', group.id); // groupId: 123456677
            console.log('1. ', GROUPS[group.id]); // undefined

            GROUPS[group.id].members = group.members.filter(memberInGroup => memberInGroup !== member.id);
            console.log('group: ', GROUPS[group.id].members.length);
        }
    });
});

我该如何建立关联?

GROUPS[group.id].members = group.members.filter(memberInGroup => memberInGroup !== member.id);

谢谢!

1 个答案:

答案 0 :(得分:1)

MDN docs on map

arr.map(function callback(currentValue[, index[, array]]) {
    // Return element for new_array
}[, thisArg])

您的问题是,您正在使用group.id作为索引,但是有关迭代的基本知识是,第一个元素索引为0,而您的ID值为1。具有10个元素的数组,最后一个元素索引为9 ,arr [9],尝试调用arr [10]会导致错误,如您的示例一样。

您可以使用forEach cuz,因为您似乎不需要数组输出

GROUPS.forEach((group, index, arr) => {
  arr[index] = "..";
});