繁体   English   中英

javascript过滤器方法不返回一个结果

[英]javascript filter method doesnt return one result

我在数组上有一个过滤器的方法,在那里我有一个区域符号。 然后我想等于我的 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) 。它应该被拒绝。错误所在的任何提示?

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");
    })

filter方法返回数组,如果没有匹配,则返回一个空数组。 即使数组为空,它也被解释为true

它归结为一个评估真值的空数组

 if([]) console.log("Empty arrays are truthy");

通过检查长度来修复它

 if([].length) console.log("You wont see this.")

0是假的!

您可以使用includes方法:

if (regions.includes('AC')) {

}

或者您可以检查过滤数组的长度:

let length = regions.filter(reg => {
          console.log(reg);
          console.log(data.region === reg);
          return reg === data.region;
        }).length;

if (length) {
}

除了其他答案之外,如果您不需要使用过滤后的数组而是记录拒绝或配置文件,我会使用.some()而不是.filter()

 const regions = ["SP", "RS", "PR", "MG", "SC"]; const toFind = "foo"; if (regions.some(reg => { console.log(reg); console.log(toFind === reg); return toFind === reg;})) { console.log("profile"); } else console.log("rejected");

filter将始终返回一个数组。 在您的情况下,如果条件始终为真,因为空数组[]为真。 如果没有匹配项,而不是filter使用find这将返回undefined ,这是错误的。

.getProfile(id, token)
.then(data => {
  let data = data.data;
  let regions = ["SP", "RS", "PR", "MG", "SC"];
  if (
    regions.find(reg => reg === data.region)
  ) {
    console.log("profile");
  } else console.log("rejected");
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM