我正在练习_.every从头开始学习Javascript,而且只有两行我不明白。你能清楚地说明这些线路在做什么:
if(iterator == undefined) {
iterator = _.identity;
_.every = function(collection, iterator) {
if(iterator == undefined) {
iterator = _.identity;
}
return _.reduce(collection, function(accumulator, item) {
if (iterator(item)) {
return accumulator;
}
else {
return false;
}
}, true);
};
我知道_.identity会返回与传递参数相同的值,但我不太清楚它在这里是如何适用的?
答案 0 :(得分:1)
如果iterator
参数为undefined
,则该语句使_.every
使用_.identity
作为默认迭代器。
为什么这会有用?因为它使_.every(someArray)
成为一个测试,以查看数组中的所有条目是否都是“真实的”。例如,如果你有一个你知道的数组包含数字,并且你想看看它们是否都是非零的,你可以使用只有一个参数(数组)的_.every()
进行测试
答案 1 :(得分:1)
_.identity
是一个返回传入内容的函数.f(x)= x
如果在没有迭代器的情况下调用_.every
,则迭代器默认设置为_.identity
。这允许您在不传入自己的迭代器的情况下调用_.every
。这基本上只是一种便利,因为如果你愿意,你可以自己传递_.identity
。