【问题标题】:javascript map and filter related issuejavascript 地图和过滤器相关问题
【发布时间】:2021-11-15 19:04:42
【问题描述】:

我知道过滤器和地图是如何工作的,但在特定情况下卡住了

如果没有找到匹配项,我看到过滤器返回 0,但是如果没有匹配项,有没有办法将其传递给映射。 例如

    const tasks = [
  {
    'name'     : 'Write for Envato Tuts+',
    'duration' : 120
  },
  {
    'name'     : 'Work out',
    'duration' : 60
  },
  {
    'name'     : 'Procrastinate on Duolingo',
    'duration' : 240
  }
];
let difficult_tasks1=tasks.filter(x=>x.duration>=200).map(x=>x? console.log(x):alert("error")); 
console.log(difficult_tasks1.length)

按预期打印,即第一个控制台打印对象 x,第二个打印长度 1

我的问题是在没有匹配项时收到错误警报

let difficult_tasks1=tasks.filter(x=>x.duration>=400).map(x=>x? console.log(x):alert("error")); 

上面什么也没打印,但我期待一个错误警报。

let difficult_tasks1=tasks.filter(x=>x.duration>=400).map(x=>console.log("a"+x));

即使在上面甚至没有打印任何东西..没有到达地图中的控制台部分

我想要的是,如果没有任何过滤,我仍然想返回一些东西或显示错误

【问题讨论】:

    标签: javascript dictionary ecmascript-6 filter


    【解决方案1】:

    您可以使用数组的.length 属性检查您的过滤器是否通过数据

    let difficult_tasks1=tasks.filter(x=>x.duration>=200).map(x=>x? console.log(x):alert("error")); 
    
    const filtered = tasks.filter(x => x.duration >= 200)
    if (filtered.length > 0) {
       filtered.map((x) => {
          console.log(x)
          return x;
       });
    } else {
       alert('Error');
    }
    

    【讨论】:

    • 谢谢..我只是简化了场景..实时,我希望我的地图在我的过滤数组上一直运行..基本上在我的 if 部分我正在做一个回调,如果没有已映射我想向用户显示错误
    • 我想你忘了地图!!
    • 不需要地图,是什么原因
    • 就像我提到的,我不是在做一个简单的 console.log。我想运行一个回调 let hard_tasks1=tasks.filter(x=>x.duration>=200).map(x=>x? callback(x):alert("error"));我显然可以按照你说的那样做。但是然后我可以使用普通的foreach循环等来完成整个事情,甚至没有过滤器......你知道我的意思吗?我想根据条件过滤一组数组,然后在过滤后的数组上我想运行一个映射函数......如果过滤器返回一些东西,则运行一个特定的函数(并且该位有效)但如果它没有返回任何内容,则显示错误/警报错误
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多