javascript - 如何区分两个数组?
问题描述
我只想获得不是朋友的用户
我有两个列表,朋友和用户,如果他们已经是朋友,那么用户列表应该不再存在
friends = [{
friend: {
id: 3,
name: "tres"
},
owner: {
id: 1,
name: "uno"
}
}];
let users = [{
id: 1,
name: "uno",
}, {
id: 2,
name: "dos"
}]
users = users.filter(currentUser =>
let flag = false, friends.forEach(function(current) {
if (currentUser.id == current.friend.id) {
flag = true;
}
}
return flag;
));
console.log(users);
我可以在函数 FILTER 中使用 FOR 吗?是正确的?
解决方案
如果我理解正确,您的friends
数组是关系列表。所以
{
friend: {id: 3, name: "tres"},
owner: {id: 1, name: "uno"}
}
表示用户 id 1 是用户 id 3 的朋友。
因此,要检查一个集合,只需使用Array.prototype.some
or Array.prototype.every
,无论哪个读得更好:
const friendless = (users, friends) =>
users.filter(user => !friends.some(relationship => relationship.friend.id === user.id))
let users = [
{id: 1, name: "uno"},
{id: 2, name: "dos"},
{id: 3, name: "tres"}
]
let friends = [{
friend: {id: 3, name: "tres"},
owner: {id: 1, name: "uno"}
},{
friend: {id: 2, name: "dos"},
owner: {id: 1, name: "uno"}
}, {
friend: {id: 3, name: "tres"},
owner: {id: 2, name: "dos"}
}];
console .log (
friendless (users, friends)
)
(或像这样:
const friendless = (users, friends) =>
users.filter(user => friends.every(relationship => relationship.friend.id !== user.id))
更新
我不知道您是否可以控制 and 的结构users
,friends
但如果可以,您可能需要重新考虑您的数据结构。您当前的方法似乎有很多不必要的重复。
这些方法中的任何一种都可以清理它:
一个
let users = [
{id: 1, name: "uno"},
{id: 2, name: "dos"},
{id: 3, name: "tres"}
]
let friends = [
{id: 1, friend: 3},
{id: 1, friend: 2},
{id: 2, friend: 3},
];
乙
let users = [
{id: 1, name: "uno"},
{id: 2, name: "dos"},
{id: 3, name: "tres"}
]
let friends = [
[1, 3],
[1, 2],
[2, 3],
];
C
let users = [
{id: 1, name: "uno", friends: [3, 2]}, // (or `friendIds`)
{id: 2, name: "dos", friends: [3]},
{id: 3, name: "tres", friends: []}
]
选项 C 对您当前的问题特别有用:
const friendless = users => users.filter(u => u.friends.length === 0)