gpt4 book ai didi

javascript - 实现下划线_.every()

转载 作者:行者123 更新时间:2023-12-03 02:45:19 25 4
gpt4 key购买 nike

我对实现 _.every() 有疑问。

我的代码在这里

  _.every = function(collection, iterator) {

if (collection.length === 0) {
return true;
}
return _.reduce(collection, function(accum, item){
if(!iterator(item)){
return false;
} else if((iterator(item))){
return accum;
}

},true);

};

但是,根据 Underbar 测试套件,我的代码不适用于“在不提供回调时应该工作”的语句

expect(_.every([true, true, true])).to.be.true;

expect(_.every([true, true, false])).to.be.false;

expect(_.every([false, false, false])).to.be.false;

我不知道我的代码有什么问题。

请让我知道如何纠正它。

最佳答案

看看如果不传递迭代器回调会发生什么。

_.every = function(collection, iterator) { // <-- iterator is undefined
if (collection.length === 0) {
return true;
}

return _.reduce(collection, function(accum, item){
if(!iterator(item)){ // <-- undefined is not a function! This will throw an error!
return false;
} else if((iterator(item))){
return accum;
}
},true);
};
<小时/>

为了解决这个问题,您需要检查是否定义了迭代器,然后调用它。否则根据您的收藏项目进行一些其他测试。

或者,您可以为迭代器提供默认值。这个解决方案可能更简单:

_.every = function(collection, iterator) { // <-- iterator is undefined
if (collection.length === 0) {
return true;
}

// overwrite iterator if it's falsy (in your case it's undefined)
iterator = iterator || function(item) {
return item;
};

return _.reduce(collection, function(accum, item){
if(!iterator(item)){
return false;
} else if((iterator(item))){
return accum;
}
},true);
};

关于javascript - 实现下划线_.every(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48124978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com