javascript - 如何使用数组过滤对象数组
问题描述
我知道堆栈中已经有很多类似的问题,但我似乎无法解决我的问题。我正在寻找具有另一个数组条件的对象来过滤一个数组。
const jobPost = [
{
id: 1,
companyName: "Photosnap",
jobTitle: "Senior Frontend Developer",
companyLogo: "./photosnap.svg",
skills: ["Frontend", "Senior", "HTML", "CSS", "JavaScript"],
new: true,
featured: true,
dayOfPost: "1d ago",
contract: "Full Time",
region: "USA only"
},
{
id: 2,
companyName: "Manage",
jobTitle: "Fullstack Developer",
companyLogo: "./manage.svg",
skills: ["Fullstack", "Midweight", "Python", "React"],
new: true,
featured: true,
dayOfPost: "1d ago",
contract: "Part Time",
region: "Remote"
},
{
id: 3,
companyName: "Account",
jobTitle: "Junior Frontend Developer",
companyLogo: "./account.svg",
skills: ["Frontend", "Junior", "React", "Sass", "JavaScript"],
new: true,
featured: false,
dayOfPost: "2d ago",
contract: "Part Time",
region: "USA only"
},
{
id: 4,
companyName: "MyHome",
jobTitle: "Junior Frontend Developer",
companyLogo: "./myhome.svg",
skills: ["Frontend", "Junior", "CSS", "JavaScript"],
new: false,
featured: false,
dayOfPost: "5d ago",
contract: "Contract",
region: "USA only"
},
{
id: 5,
companyName: "Loop Studios",
jobTitle: "Software Engineer",
companyLogo: "./loop-studios.svg",
skills: ["Fullstack", "Midweight", "JavaScript", "Sass", "Ruby"],
new: false,
featured: false,
dayOfPost: "5d ago",
contract: "Full Time",
region: "Worldwide"
},
{
id: 6,
companyName: "FaceIt",
jobTitle: "Junior Backend Developer",
companyLogo: "./faceit.svg",
skills: ["Backend", "Junior", "Ruby", "RoR"],
new: false,
featured: false,
dayOfPost: "2w ago",
contract: "Full Time",
region: "UK only"
},
{
id: 7,
companyName: "Shortly",
jobTitle: "Junior Developer",
companyLogo: "./shortly.svg",
skills: ["Frontend", "Junior", "HTML", "Sass", "JavaScript"],
new: false,
featured: false,
dayOfPost: "2w ago",
contract: "Full Time",
region: "Worldwide"
},
{
id: 8,
companyName: "Insure",
jobTitle: "Junior Frontend Developer",
companyLogo: "./insure.svg",
skills: ["Frontend", "Junior", "Vue", "JavaScript", "Sass" ],
new: false,
featured: false,
dayOfPost: "2w ago",
contract: "Full Time",
region: "USA only"
},
{
id: 9,
companyName: "Eyecam Co.",
jobTitle: "Full Stack Engineer",
companyLogo: "./eyecam-co.svg",
skills: ["Fullstack", "Midweight", "JavaScript", "Django", "Python" ],
new: false,
featured: false,
dayOfPost: "3w ago",
contract: "Full Time",
region: "Worldwide"
},
{
id: 10,
companyName: "The Air Filter Company",
jobTitle: "Front-end Dev",
companyLogo: "./the-air-filter-company.svg",
skills: ["Frontend", "Junior", "React", "Sass", "JavaScript" ],
new: false,
featured: false,
dayOfPost: "1m ago",
contract: "Part Time",
region: "Worldwide"
}
]
export default jobPost;
jobpost 数组保存在一个名为 jobDB.js 的单独文件中,并通过导入导入到我的 app.js 中。
import jobDB from "./components/modules/jobDB";
const App = () =>{
const [searchTerms, setSearchTerms] = useState([]);
const checkCriteria = (data) =>{
searchTerms.some(term => {
return data.skills.includes(term);
})
}
const onClick = (e) => {
const {textContent} = e.target;
if (!searchTerms.includes(textContent)){
setSearchTerms([...searchTerms, textContent])
}
};
return (
{searchTerms.length > 0? jobDB.filter(checkCriteria).map(createPost) :
jobDB.map(createPost)}
)
}
searchTerm 数组在用户界面点击时更新,但过滤后的数组总是返回空。
请帮忙!我已经盯着这个问题将近 24 小时了。
解决方案
您忘记返回过滤器函数的实际结果
const checkCriteria = (data) => {
return searchTerms.some(term => {
return data.skills.includes(term);
})
}
推荐阅读
- selenium - 使用 scrapy 加载会话 cookie
- python-3.x - 如何在两个 numpy 张量之间进行 numpy matmul 广播?
- sql - 有什么方法可以将数据库导入netbeans中的glassfish服务器?
- mongodb - 如何在 AWS 中的 MongoDB 副本上制作只读副本
- amazon-web-services - AWS EC2 Autoscaling 平均 CPU 利用率与 Grafana CPU 利用率
- .net-core - UHint for Kendo Dropdownlist in Grid on Partial View 失败.Net Core
- css - 在 CSS 文件中进行语义搜索
- html - 左边距不与自动合并
- .net - 如何修复 BackgroundWorker1 不做他的工作?
- javascript - React - 动态设置状态,无需硬编码关键字段