在对象数组中:
const candidates = [
{
"id": "a4b7d559-8437-4bec-a6d3-65821d50a0b5",
"name": "alpha",
"skills": [
"Go",
"Ruby",
"Python"
]
},
{
"id": "a4b7d559-8437-4bec-a6d3-6554880a0b5",
"name": "metta",
"skills": [
"Express",
"Ruby",
"Python",
"swift"
]
},
{
"id": "a4b7d559-8437-4bec-a6d3-65821d50a0b5",
"name": "Thitha",
"skills": [
"Javascript",
"React",
"Express",
"Node"
]
},
]
我想编写一个函数,当我将多个技能集作为数组传递时,即 ["Javascript", "Express", "Node"]
我返回与我的匹配的候选人在这种情况下,技能组将是最后一个 Thitha
。我想在 API 的 req.query
端点中实现此函数。请帮忙。
返回的结果是:-
{
"id": "a4b7d559-8437-4bec-a6d3-65821d50a0b5",
"name": "Thitha",
"skills": [
"Javascript",
"React",
"Express",
"Node"
]
}
到目前为止我尝试过的:-
function getCandidate(subSet, set){
const filtered = Object.values(set).filter(key =>
subSet.includes(key)).reduce((obj, key) => {
obj[key] = set[key]
return obj
}, {})
}
最佳答案
可以过滤
数组,其中每个
项都存在:
let filters = ["Javascript", "Express", "Node"];
const result = candidates.filter(f => filters.every(e=> f.skills.some(s => s == e)));
举个例子:
const candidates = [
{
"id": "a4b7d559-8437-4bec-a6d3-65821d50a0b5",
"name": "alpha",
"skills": [
"Go",
"Ruby",
"Python"
]
},
{
"id": "a4b7d559-8437-4bec-a6d3-6554880a0b5",
"name": "metta",
"skills": [
"Express",
"Ruby",
"Python",
"swift"
]
},
{
"id": "a4b7d559-8437-4bec-a6d3-65821d50a0b5",
"name": "Thitha",
"skills": [
"Javascript",
"React",
"Express",
"Node"
]
},
];
let filters = ["Javascript", "Express", "Node"];
const result = candidates.filter(f => filters.every(e=> f.skills.some(s => s == e)));
console.log(result);
关于javascript - 从对象返回最佳匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59086526/