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

标签 javascript

我对实现 _.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/

相关文章:

javascript - Json错误: Cannot read property 'xxx' of undefined

javascript - API调用的并发请求

javascript - 如何在 AmCharts 中将漏斗图旋转 90 度?

javascript - 允许用户上传 HTML/JS 文件的风险

javascript - 如何将列恢复到 jqGrid ColumnChooser 上的同一位置?

javascript - 如何在对象原型(prototype)中设置多个函数

javascript - 当forceSelection = true时重置组合框并且用户可以编辑组合框

javascript - 使用 Microsoft Office.js 插件自动进行身份验证

javascript - 文本未从 Laravel 中的 summernote 存储

javascript - div向左和向右滚动javascript的问题