Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 从数组中删除所有falsy值_Javascript_Arrays - Fatal编程技术网

Javascript 从数组中删除所有falsy值

Javascript 从数组中删除所有falsy值,javascript,arrays,Javascript,Arrays,我想从数组中删除所有falsy值。JavaScript中的Falsy值为false、null、0、“、未定义和NaN 功能弹跳器(arr){ arr=arr.filter(函数(n){ 返回(n!==未定义的&&n!==空&&n!==假&&n!==0&&n!==“”&&isNaN()!=NaN);}); 返回arr; } 保镖([7,“吃了”,“错了,9,不吃],); 除NaN测试用例外,以上所有测试都得到了满足。有人能帮我检查数组中是否包含NaN吗?既然你想去掉“falsy”值,就让Java

我想从数组中删除所有falsy值。JavaScript中的Falsy值为false、null、0、“、未定义和NaN

功能弹跳器(arr){
arr=arr.filter(函数(n){
返回(n!==未定义的&&n!==空&&n!==假&&n!==0&&n!==“”&&isNaN()!=NaN);});
返回arr;
}
保镖([7,“吃了”,“错了,9,不吃],);

除NaN测试用例外,以上所有测试都得到了满足。有人能帮我检查数组中是否包含NaN吗?

既然你想去掉“falsy”值,就让JavaScript来做吧:

function bouncer(arr) {
  return arr.filter(function(v) { return !!v; });
}
的双重应用运算符将使过滤器回调返回
true
;当值为“falsy”时,将使过滤器回调返回
false

(您的代码正在调用
isNaN()
,但没有向其传递值;这就是为什么该测试对您无效。
isNaN()
函数在强制为数字时,如果其参数为
NaN
,则返回
true
,否则返回
false

编辑-注意

function bouncer(arr) {
  return arr.filter(Boolean);
}
也会像LoremIpsum在另一个答案中指出的那样工作,因为内置的布尔构造函数做的事情与
几乎完全相同

您可以使用布尔值:

var myFilterArray = myArray.filter(Boolean);
你用错了
isNaN()
。它应该是如下所示:

function bouncer(arr) {
   return arr.filter(function (n) { 
       return n !== undefined && n !== null && n !== false && n !== 0 && n !== "" && !isNaN(n); 
   });
}

您还可以重写它:

function bouncer( arr ){
    return arr.filter( function( value ){
        return value;
    });
}

这是另一个等效但具有说明性的解决方案:

function bouncer( arr ){
    return arr.filter( function( value ){
        return value ? true : false;
    });
}
此代码示例是说明性的,因为它向读取器指示变量
将被计算为truthy或false,并且匿名函数将返回一个布尔值,
,映射到
的计算

对于不熟悉这种基于真实性从数组中删除值的方法的人,或者对于不熟悉(或没有阅读过有关
过滤器
函数的文档的人,此示例是最简洁的,它仍然传达了
过滤器
函数的行为

import _ from 'lodash' // or import _ from 'underscore'

_.compact([0, 1, false, 'hello', '', {}, null]) // returns [1, 'hello', {}]
当然,在您的应用程序中,您可能会选择更简洁但缺乏洞察力的实现:

function bouncer( arr ){
    return arr.filter( function( value ){
        return value;
    });
}

我知道这可以使用arr.filter()方法完成。但是我更喜欢使用Boolean()函数。对我来说更清楚。我是这样做的,虽然时间稍长:

function bouncer(arr) {
// Don't show a false ID to this bouncer.

    var falsy;
    var trueArr = [];

    for (i = 0; i < arr.length; i++) {

        falsy =  Boolean(arr[i]);

        if (falsy === true) {

        trueArr.push(arr[i]);

        }

    }

    return trueArr;
}

bouncer([7, "ate", "", false, 9]);
// returns a new array that is filtered accordingly.
功能弹跳器(arr){
//不要向这个保镖出示假身份证。
var falsy;
var-trueArr=[];
对于(i=0;i

^你就是这样做的

我认为这样做比较划算

   function bouncer(arr) {
        arr = arr.filter(function(item) {
            return item;
        return arr;

    bouncer([7, "ate", "", false, 9, NaN, undefined, 0]);
函数弹跳器(arr){
var结果=[];
对于(变量i=0;i
弹跳器功能:

功能弹跳器(arr){
返回arr.filter((val)=>{
返回!!val;
});
}

log(bouncer([7,“ate”,false,9])感谢上面的所有工作答案。这里有三种解决问题的方法。第三个解决方案通过您的方法@Vignesh解决了问题

1. 
function bouncer(arr) {
  return arr.filter( function( val ){
        return val;
    });
}

2. 
function bouncer(arr) {
return arr.filter(Boolean);
}
3.
  function bouncer(arr) {
  return arr.filter(function(val){
      return val !== false && val !== "" && !(Number.isNaN(val)) && val !== 
undefined && val !== 0 && val !== null;
    });
 }
这是我的想法

功能弹跳器(arr){
//不要向这个保镖出示假身份证。
var结果=[];
功能良好(obj){
if(!Boolean(obj)){
返回false;
}否则{
返回true;
}
}
对于(变量i=0;ilog(bouncer([7,“ate”,false,9])这应该是您正在寻找的:

let array = [7, 'ate', '', false, 9, NaN];

function removeFalsyItems(array) {
   // Your result
   let filter = array.filter(Boolean);

   // Empty the array
   array.splice(0, array.length);

   // Push all items from the result to our array
   Array.prototype.push.apply(array, filter);

   return array
}

removeFalsyItems(array) // => [7, 'ate', 9], funny joke btw...

使用过滤器我们可以写

function bouncer(arr) {
 return arr.filter(item => item);
}
bouncer([false, null, 0, NaN, undefined, ""]) // will return [].

尝试使用过滤器和布尔值:

let array = [7,"ate","",false,9];
array.filter((values) => {return Boolean(values) === true })

使用此简单过滤器可以:

array.filter(布尔值)

您可以阅读有关布尔值的更多信息,只需两次求反即可“强制转换”为布尔值<代码>!NaN===true
=>
!!NaN===false

    const truthy = arr.filter(o => !!o)

它将返回[]。

我看你从未接受过答案。问题是您依赖Logger.log或console.log查看null删除是否有效?我认为@LoremIpsum建议的过滤器是最干净的解决方案

  const src2DArr = [[34], [75], [30], [48], [976], [], [178], [473], [51], [75], [29], [47], [40]];
  Logger.log("src2DArr: " +JSON.stringify(src2DArr)); 
  // [[34],[75],[30],[48],[976],[],[178],[473],[51],[75],[29],[47],[40]]
  
  var src2DArr1 = src2DArr.filter(Boolean);
  Logger.log("src2DArr1: " + JSON.stringify(src2DArr1));
  // [[34],[75],[30],[48],[976],[],[178],[473],[51],[75],[29],[47],[40]] 

如果您喜欢使用JS实用程序库,如或,您可以使用
compact
函数

import _ from 'lodash' // or import _ from 'underscore'

_.compact([0, 1, false, 'hello', '', {}, null]) // returns [1, 'hello', {}]
文档:

上述代码工作正常。。。你能解释一下在返回arr.filter(函数(值){return value;})中发生了什么吗@Vignesh Array.prototype.filter检查值是否为truthy,然后将其添加到数组中。上面的所有值都不是真的在第一种情况下,筛选器正在删除字符串,即使它们不是空的,为什么?大括号禁用隐式返回,所以您将得到空数组。
x?真:假
总是多余的<代码>返回值
就足够了。在某些情况下,您需要使用
布尔(值)
!!值
,但不是这种情况。我写这个答案是因为它说明了
过滤器
根据布尔返回值计算值。没有明确说明
filter
将回调的返回值计算为布尔值,然后
返回值
不足以向
过滤器
功能的新手表达概念。非常好。函数方法的好技巧{return!!v;}与{return v;}不一样吗?从技术上讲,您甚至不需要
是因为
filter
测试的是真实性,而不是与
true
的比较。这是一个聪明的方法布尔是布尔的构造函数。这相当于
var myfilterray=myArray.filter((v)=>new Boolean(v))。如果给定值为
0
let array = [7,"ate","",false,9];
array.filter((values) => {return Boolean(values) === true })
    const truthy = arr.filter(o => !!o)
myArray = [false, null, 0, NaN, undefined, ""];
myArray.map(item => {
//if you want you can write logic
        console.log(item);
    })
    // Get rid of bad values
    .filter(Boolean);
  const src2DArr = [[34], [75], [30], [48], [976], [], [178], [473], [51], [75], [29], [47], [40]];
  Logger.log("src2DArr: " +JSON.stringify(src2DArr)); 
  // [[34],[75],[30],[48],[976],[],[178],[473],[51],[75],[29],[47],[40]]
  
  var src2DArr1 = src2DArr.filter(Boolean);
  Logger.log("src2DArr1: " + JSON.stringify(src2DArr1));
  // [[34],[75],[30],[48],[976],[],[178],[473],[51],[75],[29],[47],[40]] 
import _ from 'lodash' // or import _ from 'underscore'

_.compact([0, 1, false, 'hello', '', {}, null]) // returns [1, 'hello', {}]