从数组中删除所有有价值的值

时间:2015-10-02 12:09:55

标签: javascript arrays

我想从数组中删除所有虚假值。 JavaScript中的Falsy值为false,null,0,“”,undefined和NaN。

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

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

除了NaN测试用例之外,以上所有人都满意。有人可以帮我检查数组是否包含NaN吗?

25 个答案:

答案 0 :(得分:102)

您可以使用布尔值:

var myFilterArray = myArray.filter(Boolean);

答案 1 :(得分:51)

因为你想摆脱" falsy"值,让JavaScript做它的事情:

function bouncer(arr) {
  return arr.filter(function(v) { return !!v; });
}

!运算符的双重应用会在值为" truthy"时使过滤器回调返回true。和false当它是" falsy"。

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

编辑 - 请注意

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

也可以像LoremIpsum在另一个答案中注意到的那样,因为内置的布尔构造函数与!!完全相同。

答案 2 :(得分:18)

truthyArray = arr.filter(el => el)

^你是怎么做的

答案 3 :(得分:9)

您以错误的方式使用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;
    });
}

}

你也可以改写它:

df2

答案 4 :(得分:6)

使用此简单的过滤器即可:

array.filter(Boolean)

您可以了解有关Boolean here

的更多信息

答案 5 :(得分:3)

这是另一个等效的解释性解决方案:

function bouncer( arr ){
    return arr.filter( function( value ){
        return value ? true : false;
    });
}

此代码示例是说明性的,因为它向读者指示变量value将被评估为真或假,并且匿名函数将返回布尔值,true或{{1} },映射到false的评估。

对于不熟悉这种基于其真实性从数组中删除值的方法的人,或者对于value函数不熟悉(或未阅读过文档)的人,本示例是最简洁的仍然传达filter函数的行为。

当然,在您的应用程序中,您可以选择更简洁但不太富有洞察力的实现:

filter

答案 6 :(得分:3)

我知道这可以使用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.

答案 7 :(得分:2)

保镖功能:

function bouncer(arr) {
  return arr.filter((val) => {
    return !!val;
  });
}

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

答案 8 :(得分:2)

感谢上面的所有工作答案。以下是解决问题的3种方法。第三种解决方案通过您的方法解决问题@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;
    });
 }

答案 9 :(得分:2)

我认为这样做更好

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

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

答案 10 :(得分:1)

这是我的想法......

&#13;
&#13;
function bouncer(arr) {
  // Don't show a false ID to this bouncer.
  var result = [];
  
    function isGood(obj){
      if(!Boolean(obj)){
        return false;
      } else {
        return true;
      }
    }
    
    for (var i=0; i < arr.length; i++){
      if (isGood(arr[i]) === true){
        result.push(arr[i]);
      }
    }
  return result;
}

console.log(bouncer([7, "ate", "", false, 9]));
&#13;
&#13;
&#13;

答案 11 :(得分:1)

使用过滤器,我们可以编写

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

答案 12 :(得分:0)

使用.filter

myArray.filter(val => Boolean(val));

答案 13 :(得分:0)

我看到您从未接受答案。您是依赖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]] 

答案 14 :(得分:0)

如果您喜欢使用 LodashUnderscore.js 等 JS 实用程序库,您可以使用 compact 函数。

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

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

文档:

答案 15 :(得分:0)

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

它将返回[]。

答案 16 :(得分:0)

只需两次否定“转换”为布尔值。 True True => !NaN === true

!!NaN === false

答案 17 :(得分:0)

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

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

答案 18 :(得分:0)

这应该是您想要的:

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...

答案 19 :(得分:0)

function bouncer(arr) {

    function filterFalse(value) {
        var a = Boolean(value);
        if (a === true) {
            return a;
        }
        return a;
    }

    function filterArray(x) {
        var y = filterFalse(x);
        if (y) {
            return true;
        } else {
            return false;
        }
    }

    var newArr = arr.filter(filterArray);
    return newArr;
}

bouncer([1, null, NaN, 2, undefined]);

答案 20 :(得分:0)

function removeFalsy(value){

  var val = Boolean(value);
  if(!val)
    return false;
  return true;
}

function bouncer(arr) {

  return arr.filter(removeFalsy);
}

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

答案 21 :(得分:0)

function falsy(value) {
      if (value) {
        return value;
      }
    }

    function bouncer(arr) {
      var filter = arr.filter(falsy);
      return filter;
    }

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

答案 22 :(得分:0)

function bouncer(arr) {  
  var result = []; 
   for (var i = 0; i < arr.length; i++) {
     if (arr[i]) {
      result.push(arr[i]);
     }
   }
  return result;
 }

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

答案 23 :(得分:-1)

lodash可以很好地完成此任务,其中有一个 _.compact() 函数。

const arr = [7, "ate", "", false, 9, NaN];
console.log(_.compact(arr));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

答案 24 :(得分:-1)

function bouncer(arr) {

// Don't show a false ID to this bouncer.

for (var i = 0; i < arr.length; i++) {
        if (!arr[i]) {
            arr.splice(i, 1);
            i = i-1;
        }
    }
    return arr;

}

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