【问题标题】:How can I filter the result of a ternary that's inside a map?如何过滤地图内的三元组的结果?
【发布时间】:2020-12-29 02:29:24
【问题描述】:

我对三元世界是 100000% 的新手,所以我真的不明白发生了什么。我有以下内容:

categories.forEach((category) => {   
  const errorCategory = {
    [category]: response.map(
      (r) => r.ds_category === category && r.ds_name
    ),   
   };

  errors = { ...errors, ...errorCategory };
});

我想过滤 r.ds_name 以删除所有“错误”结果,我该怎么做?我试过了:

  1. 立即进行过滤 (r.ds_name.filter(blablabla)) 但我收到“这不是函数”错误。

  2. 从三元函数切换到old school函数,也没有得到任何结果。

  3. 过滤errorCategory (errorCategory = errorCategory.filter((item) => item === "false"),但我也得到了“这不是一个函数”的错误。

谢谢:(

【问题讨论】:

  • 所以您使用errorCategory 变量来保存结果并迭代它来过滤它。这不是正确的做法
  • 您能否展示一下response 和categories 的外观以及您的预期输出应该是什么

标签: javascript reactjs dictionary filter ternary


【解决方案1】:

要过滤数组,我建议使用“.filter”而不是“.map”。这将删除与要求集不匹配的元素。假设响应是一个数组对象,或者其他实现“过滤器”的对象,您可以执行以下操作(注意额外的括号):

categories.forEach( ( category ) => {   
    const errorCategory = {
      [ category ]: response.filter(
        (r) => (r.ds_category === category && r.ds_name)
      ),   
    };
    //Do stuff
}

【讨论】:

    【解决方案2】:

    您可以在这样的过滤方法中使用三元运算符

    const newArray = array.filter( element => {
      element.property === "text" ? true : false
    })
    
    

    它检查 element.property 是否等于“文本”。如果相等,则返回 true。如果不是,则返回 false。但你不需要这样做。你可以这样做

    const newArray = array.filter( element => {
      element.property === "text"
    })
    

    这将返回相同的结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多