比较两个单独数组中对象的名称 属性 并在 React 中创建一个新的过滤数组
comparing name property on objects in two separate arrays and creating a new filtered array in React
在我的 React 组件中,我有一个名为 providerServices 的数组和一个名为 userServices 的数组。两者都包含多个名称为 属性 的对象。
在页面加载时,我需要一个过滤版本的 providerServices,它不包含任何与 userServices.
中的对象同名 属性 的对象
useEffect(() => {
userServices.map((us) => {
setFilteredServices(providerServices.filter((service) => service.name !== us.name))
})
}, [])
我上面的代码只删除了第一个匹配的对象,而不是所有匹配的对象。非常感谢一些帮助或指导
您只需要从 providerServices
中过滤掉 .find
在 userServices
上的每个元素
providerServices.filter(function(providerServicesObj) {
return !userServices.find(function(userServicesObj) {
return providerServicesObj.name === userServicesObj.name
})
})
这在 ES6 中应该可以正常工作,单行解决方案:
useEffect(() => {
const filteredServices = providerServices.filter(({ name: providerServicesName }) =>
!userServices.some(({ name: userServicesName }) => userServicesName ===
providerServicesName));
setFilteredServices(filteredServices);
}, [])
在我的 React 组件中,我有一个名为 providerServices 的数组和一个名为 userServices 的数组。两者都包含多个名称为 属性 的对象。 在页面加载时,我需要一个过滤版本的 providerServices,它不包含任何与 userServices.
中的对象同名 属性 的对象 useEffect(() => {
userServices.map((us) => {
setFilteredServices(providerServices.filter((service) => service.name !== us.name))
})
}, [])
我上面的代码只删除了第一个匹配的对象,而不是所有匹配的对象。非常感谢一些帮助或指导
您只需要从 providerServices
中过滤掉 .find
在 userServices
providerServices.filter(function(providerServicesObj) {
return !userServices.find(function(userServicesObj) {
return providerServicesObj.name === userServicesObj.name
})
})
这在 ES6 中应该可以正常工作,单行解决方案:
useEffect(() => {
const filteredServices = providerServices.filter(({ name: providerServicesName }) =>
!userServices.some(({ name: userServicesName }) => userServicesName ===
providerServicesName));
setFilteredServices(filteredServices);
}, [])