我想将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);
谢谢!
答案 0 :(得分:1)
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] = "..";
});