从头开始强调每一个
Underscore every from scratch
我正在从头练习_.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 returns 与用作传递参数的值相同,但我不太明白它在这里如何适用?
如果 iterator
参数是 undefined
,该语句使 _.every
使用 _.identity
作为默认迭代器。
为什么这会有用?因为它使 _.every(someArray)
成为一个测试,以查看数组中的所有条目是否都是 "truthy"。例如,如果您有一个您知道包含数字的数组,并且您想要查看它们是否全为非零,则可以使用 _.every()
和仅一个参数(数组)来进行该测试.
_.identity
是一个 returns 你传入的函数。 f(x) = x
如果您在没有迭代器的情况下调用 _.every
,则迭代器默认设置为 _.identity
。这允许您调用 _.every
而无需传入您自己的迭代器。这基本上只是一种方便,因为如果需要,您可以自己传入 _.identity
。
我正在从头练习_.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 returns 与用作传递参数的值相同,但我不太明白它在这里如何适用?
如果 iterator
参数是 undefined
,该语句使 _.every
使用 _.identity
作为默认迭代器。
为什么这会有用?因为它使 _.every(someArray)
成为一个测试,以查看数组中的所有条目是否都是 "truthy"。例如,如果您有一个您知道包含数字的数组,并且您想要查看它们是否全为非零,则可以使用 _.every()
和仅一个参数(数组)来进行该测试.
_.identity
是一个 returns 你传入的函数。 f(x) = x
如果您在没有迭代器的情况下调用 _.every
,则迭代器默认设置为 _.identity
。这允许您调用 _.every
而无需传入您自己的迭代器。这基本上只是一种方便,因为如果需要,您可以自己传入 _.identity
。