【问题标题】:filter() and some() don't return expected valuefilter() 和 some() 不返回预期值
【发布时间】:2020-06-08 10:23:44
【问题描述】:

我正在创建一种过滤方法来过滤从 API 获得的数据集。

要过滤的数组,有很多参数的对象,但我想只根据指定的参数来过滤。

示例:

 let Cars: Array = [{name: "volvo", color:"red", year: "1999"}, {name: "vw", color:"blue", year: "2000"}];

我的过滤功能:

  filterAPIResponse(data: any, textToFilter: string):any {

    const keysToFilter = ["name", "color"];

    if(textToFilter) {

    return data.filter(obj => (keysToFilter.some(val => {
        obj[val].toLowerCase().includes(textToFilter.toLowerCase());
      })));

      } else {
      return data;
    }
  }

所以这总是返回一个空数组,即使我调用:

this.filterAPIResponse(Cars, "volv");

这里我希望"volv" 匹配汽车"volvo"

确实obj[val].toLowerCase().includes(textToFilter.toLowerCase()); 的console.log 确实返回true,但最后的数组是空的。

所以这一定意味着我在filter()some() 之间犯了一个错误,我没有看到它?

【问题讨论】:

  • 为了更清楚,请val => { return <condition> }val => <condition>

标签: javascript angular filter


【解决方案1】:

如 cmets 中所述,我在 some 回调中添加了 return。否则返回值将始终为undefined,而array.some() 将始终返回一个空数组。

let cars = [{name: "volvo", color:"red", year: "1999"}, {name: "vw", color:"blue", year: "2000"}]

function filterAPIResponse(data, textToFilter) {
    const keysToFilter = ["name", "color"]
    if(textToFilter) {
      /* The return
      return data.filter(obj => keysToFilter.some(val => {
        return obj[val].toLowerCase().includes(textToFilter.toLowerCase())
      }))
      /*/ // Or the one-liner
      return data.filter(obj => keysToFilter.some(val =>
        obj[val].toLowerCase().includes(textToFilter.toLowerCase())
      ))
      //*/
    } else {
      return data
    }
  }

console.log(this.filterAPIResponse(cars, "volv"))

【讨论】:

  • 所以基本上我所缺少的只是从 some() 部分中删除 {} 括号?我仍然不确定为什么这些括号会破坏代码
  • ok 我觉得加括号的时候需要指定回车,但是保持在“一行”的时候,就假设回车了?那正确吗?无论如何,谢谢,这解决了我的问题
【解决方案2】:

您没有来自 some 函数的 return 语句。 你有两个选择: 1.在一行中添加一些函数,这样就不需要return语句。 2.添加return语句。 我没有测试代码,但似乎是问题所在。

【讨论】:

    猜你喜欢
    • 2013-03-22
    • 2012-02-04
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多