Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我使用过滤器对吗?我不知道';我不知道这个解决方案为什么有效_Javascript_Filter - Fatal编程技术网

Javascript 我使用过滤器对吗?我不知道';我不知道这个解决方案为什么有效

Javascript 我使用过滤器对吗?我不知道';我不知道这个解决方案为什么有效,javascript,filter,Javascript,Filter,我现在正在学习FCC的基本算法,虽然我通过了这个练习,但我并不完全理解它为什么会起作用,因为当我把事情改成我认为应该的样子时,它就不起作用了,但是当我改变事情,使它们看起来不对时,它仍然起作用 例如,我将true更改为false,它仍然有效,或者我只是键入true,它仍然有效,或者我只是说返回值,它仍然有效。过滤器是否自动删除错误值 这是我的密码。我原来不起作用的代码是if(value==true) 从数组中删除所有虚假值 JavaScript中的Falsy值为false、null、0、“、未定

我现在正在学习FCC的基本算法,虽然我通过了这个练习,但我并不完全理解它为什么会起作用,因为当我把事情改成我认为应该的样子时,它就不起作用了,但是当我改变事情,使它们看起来不对时,它仍然起作用

例如,我将
true
更改为
false
,它仍然有效,或者我只是键入true,它仍然有效,或者我只是说
返回值
,它仍然有效。过滤器是否自动删除错误值

这是我的密码。我原来不起作用的代码是
if(value==true)

从数组中删除所有虚假值

JavaScript中的Falsy值为false、null、0、“、未定义和NaN

更新

谢谢你的回答,它们都非常有助于消除我的困惑

function bouncer(arr) {
  let x = arr.filter(ages => {
    return ages;
  })
  return(x);
}

bouncer([7, "ate", "", false, 9]);

这就是我最后重新编写的解决方案,现在我明白了为什么我要这么做。

filter
在数组中迭代。在每个元素迭代中调用回调

如果您在回调中返回一个“truthy”值,那么该元素将保留在结果数组中,否则不会

您的困惑源于这样一个事实,即您认为需要以某种方式返回
参数您不需要

看看这个例子:

var动物=['dog','dog','cat','cat']
变量猫=动物。过滤器(值=>{
如果(值=='cat'){
返回真值
}否则{
返回错误
}
})

console.log(cats)
filter
在数组中迭代。在每个元素迭代中调用回调

如果您在回调中返回一个“truthy”值,那么该元素将保留在结果数组中,否则不会

您的困惑源于这样一个事实,即您认为需要以某种方式返回
参数您不需要

看看这个例子:

var动物=['dog','dog','cat','cat']
变量猫=动物。过滤器(值=>{
如果(值=='cat'){
返回真值
}否则{
返回错误
}
})
console.log(猫)
您的回调

if (value !== true)
  return value;
相当于

return value;
在您的情况下,因为数组中没有一个元素是
true
,所以
value!==true
始终有效

如果你把它改成

if (value !== false)
    return value;
if (value === true)
    return value;
它仍然执行
返回值用于大多数数组元素。唯一的异常是
false
,对于该异常,函数返回
undefined
(因为没有执行显式的
return
语句)
undefined
是falsy,因此它被
filter
视为与
return false
相同(因为
filter
只关心回调返回的是true还是falsy值)。因此,如果元素为
false,则最终不返回值与
返回值
相同

function bouncer(arr) {
  let x = arr.filter(value => {
    if (value !== true)
      return value;
  })
  console.log(x);
  return x;
}   

bouncer([7, "ate", "", false, 9]);
另一方面,如果您将其更改为

if (value !== false)
    return value;
if (value === true)
    return value;
如果当前元素为
true
,则回调将返回
true
,对于任何其他值,回调将返回
undefined
。净效果是删除所有非
true
的元素(在您的情况下是所有元素,因为您的输入数组不包含
true

如果您想删除错误的值,您可以简单地说

arr.filter(value => { return value; })
// or:
arr.filter(value => value)
因为您使用的是值本身作为条件:任何看起来虚假的内容都会被
过滤器删除
;任何看起来真实的东西都会保留下来

如果您发现这一点令人困惑,也许可以通过查看此自定义(和简化的)
过滤器
实现来澄清问题:

功能我的过滤器(arr,fn){
var结果=[];
对于(变量i=0;ivalue))您的回调

if (value !== true)
  return value;
相当于

return value;
在您的情况下,因为数组中没有一个元素是
true
,所以
value!==true
始终有效

如果你把它改成

if (value !== false)
    return value;
if (value === true)
    return value;
它仍然执行
返回值用于大多数数组元素。唯一的异常是
false
,对于该异常,函数返回
undefined
(因为没有执行显式的
return
语句)
undefined
是falsy,因此它被
filter
视为与
return false
相同(因为
filter
只关心回调返回的是true还是falsy值)。因此,如果元素为
false,则最终不返回值与
返回值
相同

function bouncer(arr) {
  let x = arr.filter(value => {
    if (value !== true)
      return value;
  })
  console.log(x);
  return x;
}   

bouncer([7, "ate", "", false, 9]);
另一方面,如果您将其更改为

if (value !== false)
    return value;
if (value === true)
    return value;
如果当前元素为
true
,则回调将返回
true
,对于任何其他值,回调将返回
undefined
。净效果是删除所有非
true
的元素(在您的情况下是所有元素,因为您的输入数组不包含
true

如果您想删除错误的值,您可以简单地说

arr.filter(value => { return value; })
// or:
arr.filter(value => value)
因为您使用的是值本身作为条件:任何看起来虚假的内容都会被
过滤器删除
;任何看起来真实的东西都会保留下来

如果您发现这一点令人困惑,也许可以通过查看此自定义(和简化的)
过滤器
实现来澄清问题:

功能我的过滤器(arr,fn){
var结果=[];
对于(变量i=0;ilog(my_过滤器([7,“ate”,“false,9],value=>value))如果您的目的是返回仅保留truthy值的数组,请执行以下操作:

.filter(Boolean)
在对
过滤器的回调中,并不总是返回值,如果不返回,这意味着