【发布时间】:2017-05-10 04:05:30
【问题描述】:
我有 tagsList 大约有 20 个标签,termIds 是一个最多包含 3 个标签 ID 的数组。
我正在尝试在 tagsList 中找到与 termIds 中的 id 匹配的标签,然后设置它们的边界。希望避免 for 循环和面向对象编程,转而支持使用 Ramda curry 的函数式编程解决方案。
tagsList 中的标签看起来像:
{
term: 'hi',
id: 123
}
termIds 可能看起来像 [123, 345, 678]
当我找到一个匹配的 id 时,我给那个标签一个新的键 border1:true、border2:true 等等...
目标:
有一个标签列表,我有另一个termIds数组,目标是查看tagsList中的任何标签是否有一个与termIds匹配的id。如果是,给它一个border1,如果有2个,那么第2个得到border2,最后3得到border 3。
我首先尝试的:
const checkId = _.curry((term_id, tag) => {
if (tag.id === term_id) {
console.log('match found!', tag)
}
});
const matchId = checkId(termIds);
const coloredTags = R.map(matchId, tagsList);
console.log('coloredTags', coloredTags)
return tagsList;
但这不起作用,因为我将整个 termIds 数组预加载到 checkId 函数中。相反,我想用单个项目预加载它。
接下来我尝试了这个我认为可行的方法,但出现了一个奇怪的错误:
const matchId = R.forEach(checkId, termIds);
【问题讨论】:
-
您的对象标签没有任何边框属性.....所以给我们标签列表和预期结果
-
我刚刚添加了这些细节,是的,标签没有边框键,但我为前端 UI 模型添加了它。
-
从您的角度来看,您几乎给出了解决方案的要素,但我们不知道问题出在哪里。你宁愿给我们你期望的结果。简而言之,给我们一个 tagList termIds 和预期 tagsList 的例子。否则我们会想知道每个元素有多少个边框......
-
有一个标签列表,我有另一个termIds数组,目标是查看tagsList中的任何标签是否有一个与termIds匹配的id。如果是这样,给它一个边界1,如果有2,那么第二个得到边界2,最后3得到边界3。
标签: javascript arrays functional-programming ramda.js