我正在尝试比较两个数组,但它没有正确过滤。我正在尝试添加用户,我的函数会比较 ID 和 StaffID,如果 StaffID 不在当前用户数组中,则应该设置新用户的状态,以便可以添加它们。
export default function AddUserDropdown({onChange}) {
useEffect(() => {
getUsersToAdd();
}, []);
const [state, setState] = React.useState({
open: false,
name: '',
users: [],
id: null,
});
const [user, setUser] = React.useState({
newUsers: []
})
const getUsersToAdd = () => {
axios.all([
axios.get('/updateUserList'),
axios.get('/userInformation')
])
.then(axios.spread((newUserBox, currentUserBox) => {
let newUserIds = [];
let currentUserIds = [];
for (let newUser of currentUserBox.data){
newUserIds.push(newUser.id);
}
for (let user of newUserBox.data) {
if (!newUserIds[user.staffID]) {
currentUserIds.push(user);
}
}
setUser({...user, newUsers: currentUserIds });
}));
}
// ...
};
// ...
};
当 axios 调用请求用户信息端点时,它会返回此
[
{
"id": 1,
"firstName": "Elton",
"lastName": "Frederick",
"departmentId": 1,
"admin": true,
"hasApproval": false,
"position": "Developer",
"vh5given": 31,
"vh5rec": 280,
"profilePic": "https://www.travelplannersinternational.com/wp-content/uploads/2019/12/Elton.jpg",
"password": "abc234"
},
{
"id": 2,
"firstName": "Julio",
"lastName": "Probando",
"departmentId": 1,
"admin": false,
"hasApproval": true,
"position": "Lead Dev",
"vh5given": 11,
"vh5rec": 339,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/03/Julio_.jpg?lossy=1&strip=1&webp=1",
"password": "abc232"
},
{
"id": 3,
"firstName": "Corey",
"lastName": "Chris",
"departmentId": 2,
"admin": false,
"hasApproval": false,
"position": "Customer Service",
"vh5given": 14,
"vh5rec": 167,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/09/Corey.jpg?lossy=1&strip=1&webp=1",
"password": "abc123"
},
{
"id": 4,
"firstName": "Daisy",
"lastName": "Ramos",
"departmentId": 3,
"admin": false,
"hasApproval": false,
"position": "ATC",
"vh5given": 22,
"vh5rec": 202,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/03/Daisy_.jpg?lossy=1&strip=1&webp=1",
"password": "abc321"
},
{
"id": 7,
"firstName": "Air Car Hotel",
"lastName": "Nunca",
"departmentId": 4,
"admin": false,
"hasApproval": false,
"position": "",
"vh5given": 0,
"vh5rec": 25,
"profilePic": "profile.jpg",
"password": "abc123"
},
{
"id": 8,
"firstName": "Jenn",
"lastName": "Lee",
"departmentId": 4,
"admin": false,
"hasApproval": false,
"position": "Vp Of Sales",
"vh5given": 0,
"vh5rec": 0,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/03/Jenn2_.jpg?lossy=1&strip=1&webp=1",
"password": "abc123"
},
{
"id": 9,
"firstName": "Reyna",
"lastName": "Pagan",
"departmentId": 5,
"admin": false,
"hasApproval": false,
"position": "Agent Support Manager",
"vh5given": 0,
"vh5rec": 20,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/03/Reyna_.jpg?lossy=1&strip=1&webp=1",
"password": "abc123"
},
{
"id": 10,
"firstName": "Ameilia",
"lastName": "Rodriguez",
"departmentId": 6,
"admin": false,
"hasApproval": false,
"position": "Human Resources",
"vh5given": 0,
"vh5rec": 5,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/03/Amelia_.jpg?lossy=1&strip=1&webp=1",
"password": "abc123"
}
]
这些是已添加的用户。
当调用 updateUserList 端点时,它返回:
[
{
"staffID": 1,
"dept": "Junior Web Developer",
"email": "manasaN@tpionline.com",
"name": "manasa",
"password": "$2y$10$/zYS7OhzwdLOi6Slzc3Rv.aJFJALiY0y1J6MjnLCN24GmZ3rMHWUS"
},
{
"staffID": 2,
"dept": "Web Developer",
"email": "juliof@tpionline.net",
"name": "Julio Fajardo",
"password": "$2y$10$MphAC8aRY2uzs1ZERZDn9uvCqK1/1nd7t0KukEkvGbx5Y4van.Da6"
},
{
"staffID": 3,
"dept": "Fake Title",
"email": "johnf@tpionline.com",
"name": "John Fester",
"password": "$2y$10$/oa/ESQmhhc5WvxrQKoUU.Pj5sM3gZY5FccilGfCUL5eyeOU5IDSa"
},
{
"staffID": 5,
"dept": "Fake Title",
"email": "fakeguy@gmail.net",
"name": "Test",
"password": "$2y$10$VWnnw5gRTN2absWos04fsOixW6TjOepNa3n0v/7ybFqsFZL8oPiJm"
},
{
"staffID": 6,
"dept": "Conf room",
"email": "conf2@gmail.com",
"name": "Conf 1st floor",
"password": "$2y$10$KAZa1k2Sd/rg6dnVeqw4duB/XbAhcVXP.Fze6Zle3ZhcMaRphloG."
},
{
"staffID": 8,
"dept": "Fake Title",
"email": "newguy@gmail.net",
"name": "New guy",
"password": ""
},
{
"staffID": 9,
"dept": "Fake Title",
"email": "nguy@gmail.net",
"name": "New Guy2",
"password": ""
},
{
"staffID": 12,
"dept": "Test ADD",
"email": "cristinab@tpionline.com",
"name": "Cristina Bermudez",
"password": "$2y$10$92I6fSJY6OW001caJJmeReHnaeF5tdHBjWHBmoCvX1RnfhTspjpBa"
},
{
"staffID": 30,
"dept": "Erwing",
"email": "erwingh@tpionline.com",
"name": "Erwing Hernandez",
"password": "$2y$10$RWgOBbUHojgmyk3behYhd.kzdFEiH.6BBaxn4B070pS5q5Gf3ZYEa"
}
]
我需要完成的是,如果当前没有用户的 ID 等于员工 ID,则应将其设置在状态中,以便我可以添加此用户。根据上面的数据,应该添加的用户应该是 员工ID为:5,6,12,30。
现在我的函数返回:
0: {staffID: 8, dept: "Fake Title", email: "newguy@gmail.net", name: "New guy", password: ""}
1: {staffID: 9, dept: "Fake Title", email: "nguy@gmail.net", name: "New Guy2", password: ""}
2: {staffID: 12, dept: "Test ADD", email: "cristinab@tpionline.com", name: "Cristina Bermudez", password: "$2y$10$92I6fSJY6OW001caJJmeReHnaeF5tdHBjWHBmoCvX1RnfhTspjpBa"}
3: {staffID: 30, dept: "Erwing", email: "erwingh@tpionline.com", name: "Erwing Hernandez", password: "$2y$10$RWgOBbUHojgmyk3behYhd.kzdFEiH.6BBaxn4B070pS5q5Gf3ZYEa"}
最佳答案
let currentUserIds = currentUserBox.map(user => user.id)
let newUsers = newUserBox.filter(newUser => !currentUserIds.includes(newUser.staffID))
newUsers
是您想要的数组。
代码看起来像这样:
let currentUserBox = [{
"id": 1,
"firstName": "Elton",
"lastName": "Frederick",
"departmentId": 1,
"admin": true,
"hasApproval": false,
"position": "Developer",
"vh5given": 31,
"vh5rec": 280,
"profilePic": "https://www.travelplannersinternational.com/wp-content/uploads/2019/12/Elton.jpg",
"password": "abc234"
},
{
"id": 2,
"firstName": "Julio",
"lastName": "Probando",
"departmentId": 1,
"admin": false,
"hasApproval": true,
"position": "Lead Dev",
"vh5given": 11,
"vh5rec": 339,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/03/Julio_.jpg?lossy=1&strip=1&webp=1",
"password": "abc232"
},
{
"id": 3,
"firstName": "Corey",
"lastName": "Chris",
"departmentId": 2,
"admin": false,
"hasApproval": false,
"position": "Customer Service",
"vh5given": 14,
"vh5rec": 167,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/09/Corey.jpg?lossy=1&strip=1&webp=1",
"password": "abc123"
},
{
"id": 4,
"firstName": "Daisy",
"lastName": "Ramos",
"departmentId": 3,
"admin": false,
"hasApproval": false,
"position": "ATC",
"vh5given": 22,
"vh5rec": 202,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/03/Daisy_.jpg?lossy=1&strip=1&webp=1",
"password": "abc321"
},
{
"id": 7,
"firstName": "Air Car Hotel",
"lastName": "Nunca",
"departmentId": 4,
"admin": false,
"hasApproval": false,
"position": "",
"vh5given": 0,
"vh5rec": 25,
"profilePic": "profile.jpg",
"password": "abc123"
},
{
"id": 8,
"firstName": "Jenn",
"lastName": "Lee",
"departmentId": 4,
"admin": false,
"hasApproval": false,
"position": "Vp Of Sales",
"vh5given": 0,
"vh5rec": 0,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/03/Jenn2_.jpg?lossy=1&strip=1&webp=1",
"password": "abc123"
},
{
"id": 9,
"firstName": "Reyna",
"lastName": "Pagan",
"departmentId": 5,
"admin": false,
"hasApproval": false,
"position": "Agent Support Manager",
"vh5given": 0,
"vh5rec": 20,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/03/Reyna_.jpg?lossy=1&strip=1&webp=1",
"password": "abc123"
},
{
"id": 10,
"firstName": "Ameilia",
"lastName": "Rodriguez",
"departmentId": 6,
"admin": false,
"hasApproval": false,
"position": "Human Resources",
"vh5given": 0,
"vh5rec": 5,
"profilePic": "https://388616.smushcdn.com/941012/wp-content/uploads/2019/03/Amelia_.jpg?lossy=1&strip=1&webp=1",
"password": "abc123"
}
]
let newUserBox = [{
"staffID": 1,
"dept": "Junior Web Developer",
"email": "manasaN@tpionline.com",
"name": "manasa",
"password": "$2y$10$/zYS7OhzwdLOi6Slzc3Rv.aJFJALiY0y1J6MjnLCN24GmZ3rMHWUS"
},
{
"staffID": 2,
"dept": "Web Developer",
"email": "juliof@tpionline.net",
"name": "Julio Fajardo",
"password": "$2y$10$MphAC8aRY2uzs1ZERZDn9uvCqK1/1nd7t0KukEkvGbx5Y4van.Da6"
},
{
"staffID": 3,
"dept": "Fake Title",
"email": "johnf@tpionline.com",
"name": "John Fester",
"password": "$2y$10$/oa/ESQmhhc5WvxrQKoUU.Pj5sM3gZY5FccilGfCUL5eyeOU5IDSa"
},
{
"staffID": 5,
"dept": "Fake Title",
"email": "fakeguy@gmail.net",
"name": "Test",
"password": "$2y$10$VWnnw5gRTN2absWos04fsOixW6TjOepNa3n0v/7ybFqsFZL8oPiJm"
},
{
"staffID": 6,
"dept": "Conf room",
"email": "conf2@gmail.com",
"name": "Conf 1st floor",
"password": "$2y$10$KAZa1k2Sd/rg6dnVeqw4duB/XbAhcVXP.Fze6Zle3ZhcMaRphloG."
},
{
"staffID": 8,
"dept": "Fake Title",
"email": "newguy@gmail.net",
"name": "New guy",
"password": ""
},
{
"staffID": 9,
"dept": "Fake Title",
"email": "nguy@gmail.net",
"name": "New Guy2",
"password": ""
},
{
"staffID": 12,
"dept": "Test ADD",
"email": "cristinab@tpionline.com",
"name": "Cristina Bermudez",
"password": "$2y$10$92I6fSJY6OW001caJJmeReHnaeF5tdHBjWHBmoCvX1RnfhTspjpBa"
},
{
"staffID": 30,
"dept": "Erwing",
"email": "erwingh@tpionline.com",
"name": "Erwing Hernandez",
"password": "$2y$10$RWgOBbUHojgmyk3behYhd.kzdFEiH.6BBaxn4B070pS5q5Gf3ZYEa"
}
]
let currentUserIds = currentUserBox.map(user => user.id)
let newUsers = newUserBox.filter(newUser => !currentUserIds.includes(newUser.staffID))
console.log(newUsers)
关于javascript - 如何正确过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59360708/