首页 > 解决方案 > javascript过滤方法不返回一个结果

问题描述

我在数组上有一个过滤器方法,其中有一个区域符号。然后我想等于我的 HTTP 请求结果。当结果为真时,它应该console.log("profile"),当为假时,应该返回console.log("rejected")。但无论结果如何,总会有console.log("profile")

 .getProfile(id, token)
    .then(data => {
      let data = data.data;
      let regions = ["SP", "RS", "PR", "MG", "SC"];
   if (
        regions.filter(reg => {
          console.log(reg);
          console.log(data.region === reg);
          return reg === data.region; // it is false, because data.region is AC
        })
      ) {
        console.log("profile");
      } else console.log("rejected");
    })

所以在控制台我的结果是: 在此处输入图像描述

所以..我想知道,为什么,什么时候reg === data.region是假的,我有console.log("profile). 它应该被拒绝。任何提示错误在哪里?

标签: javascriptarrays

解决方案


let regions = ["SP", "RS", "PR", "MG", "SC"];

let result = regions.filter(a => a === 'AC');

它给你空白数组,它不是一个falsy

所以这就是为什么如果条件运行......

您可以使用 some() 方法测试数组中的至少一个元素是否通过了提供的函数实现的测试。它返回一个布尔值。

  let regions = ["SP", "RS", "PR", "MG", "SC"];

let result = regions.some(a => a === 'AC');
// or you can use `includes`
let result1 = regions.includes('AC'); 

now result contain a boolean value 

你可以这样做我重构你的代码

.getProfile(id, token)
    .then(data => {
      let data = data.data;
      let regions = ["SP", "RS", "PR", "MG", "SC"];
      let result = regions.some(reg =>  reg === data.region);  // it is false, because data.region is AC
    if (result) {
        console.log("profile");
      } else  {

      }console.log("rejected");
    })

推荐阅读