【发布时间】:2021-01-26 01:00:10
【问题描述】:
您好,我有一个对象数组,如下所示:
[
{
"id": "ae588a6b-4540-5714-bfe2-a5c2a65f547b",
"name": "Peter casa",
"skills": [
"javascript",
"es6",
"nodejs"
]
},
{
"id": "ae588a6b-4540-5714-bfe2-a5c2a65f547a",
"name": "Peter Coder",
"skills": [
"javascript",
"es6",
"nodejs",
"express"
]
}
]
并且我正在尝试根据技能获得最佳匹配,我正在使用 lodash 并且想法是解决:
通过“技能”:[ “JavaScript”, "es6", “节点”, “表示” ] 得到“Peter Coder”而不是“Peter casa”,因为第一个匹配给定数组中的所有技能,是否有任何 lodash 方法来执行此操作?
编辑:
在这个特定的例子中,函数需要让候选人更适合,例如,如果我通过了技能:“技能”:[ “JavaScript”, "es6", “节点” ]即使第一个完美匹配我也需要选择第二个,因为它匹配技能并且有更多技能,所以更好的匹配
【问题讨论】:
-
有什么理由不使用
array.find(value => skills.every(skill => value.skills.includes(skill)))? -
我只是编辑问题,因为它不完整,您的解决方案适用于第一种情况,但不适用于第二种情况。
-
对用户使用单个 es6/lodash reduce,并且对于每次迭代,如果他的技能比迭代中的当前用户更适合,则返回累积的用户,否则返回当前用户。最后,您可以直接从 reduce fn 中获得更多匹配的用户
标签: javascript node.js arrays lodash javascript-objects