这是我想要开始工作的主旨。在这一点上,感觉就像不使用_.over函数会更容易
(value, key) => _.overSome(thingOnValueA, thingOnValueB, thingOnKeyA)
_.oversome
创建一个检查所有谓词的函数,在我的实例中我有大约5个谓词。问题是它将数组中的两个变量传递给所有内部函数/谓词,前两个应该是值,最后一个是键。我试过这个,但它不起作用:
(value, key) => _.overSome(thingOnValueA(value), thingOnValueB(value), thingOnKeyA(key))
(overSome需要功能,而不是功能调用)
还有:
(value, key) => _.overSome(value => thingOnValueA(value), value => thingOnValueB(value), key =>thingOnKeyA(key))
(eslint警告该值已在较高范围内使用)
user3297291建议:
(value, key) => _.overSome(() => thingOnValueA(value), () => thingOnValueB(value), () =>thingOnKeyA(key))
转化为
var myFunction = function myFunction(value, key) {
return _.overSome(function() {
return thingOnValueA(value)
}, function() {
return thingOnValueb(value)
}, function() {
return thingOnKeyA(key)
},
}
我认为由于lodash的工作原理,当它运行每个函数时,它会查看传递给它的参数,并获得0,这会破坏它的工作原理。
我的情况,对于上下文,我正在检查一个数组或键值对,看看它们是否是有效的搜索词
[
{shoeSize: 5},
{colour: "white"}
{width: ""}
{searchId: "8dc0ce98-5b72-4993-bbe3-6edc1ec2a5b8"}
]
所以我排除了无效的颜色,空的字符串和太大的鞋码以及我实际上并不感兴趣的字段(这只是一个虚拟的例子,我不卖鞋子!)。
如何拆分两个变量之间的_.overSome
函数?
编辑:
以下是我正在做的具体示例:
const hasInternalField = _.partial(_.includes, ['searchId']);
const isInvalidSearchTerm = _.overSome(_.isundefined, _.isEmpty, _.negate(_.isString), hasInternalField)
现在我从hasInternalField
中取出_.overSome
并检查何时调用isInvalidSearchTerm。我仍然对实际解决方案感兴趣。
答案 0 :(得分:0)
_.overSome
将一组谓词函数作为输入并返回单个函数,例如:
const g = _.overSome(f1, f2, f3);
将使用传递给f1
的任何参数调用内部函数f2
,f3
,g
。通常g
传递一个参数,但它也可以采用一个或零参数。
例如,如果你想
// Zero argument version
const predicate = (value, key) => _.overSome(
() => thingOnValueA(value),
() => thingOnValueB(value),
() => thingOnKeyA(key)
)(); // Don't forget to actually call the function returned by `_.overSome`
(您也可以部分应用过滤功能,例如将() => thingOnValueA(value)
替换为thingOnValueA.bind(null, value)
或_.partial(thingOnValueA, value)
,但我个人认为箭头功能版本更清晰了)
或者,您可以将value
和key
直接传递给_.overSome
返回的函数,并消除额外的函数包装器:
// Two argument version
const predicate = _.overSome(
(value, key) => thingOnValueA(value),
(value, key) => thingOnValueB(value),
(value, key) => thingOnKeyA(key),
);