[英]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.