JS - If语句有很多条件

时间:2015-08-14 21:08:59

标签: javascript if-statement

我的目标是确定一个数组是否包含任何falsey元素并创建一个没有这些元素的新数组。我想出了一个可怕的丑陋功能,但我无法想出一个更好的方法来编写它。

    function bouncer(arr) {
  var newArray = [];
  for (var i = 0; i < arr.length; i++)
    if (arr[i] !== false ) {
      if (arr[i] !== NaN) {
        if (arr[i] !== "") {
          if (arr[i] !== 0) {
            if (arr[i] !== undefined) {
              if (arr[i] !== null) {
      newArray.push(arr[i]);
    }}}}}}
  return newArray;


}

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

我尝试使用if语句,例如

if (arr[i] !== false || arr[i] !== "")

但是当我这样做时,由于某种原因它不会捕获这两个条件。什么是更简单的方法呢?

4 个答案:

答案 0 :(得分:1)

您正在使用OR,而应使用AND:

if (arr[i] !== false && arr[i] !== "")

答案 1 :(得分:1)

检查arr[i]是否真实,然后按下该值。

arr[i] && newArray.push(arr[i]);

完整代码:

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

Array.filter

newArr = arr.filter(function (a) { return a; });

答案 2 :(得分:1)

更可读的@Nina Scholz的答案是明确检查真实性而不依赖于短路。

if (arr[i]) { newArray.push(arr[i]); }

当然,您可以使用filter

newArr = arr.filter(function(el){ return el == true; });

答案 3 :(得分:0)

你应该使用过滤器。

// - trying to look for substring in array 
// - if match is found 
// - replace substring without using the native method replace();

var div = $('.insert');

data = ["erf,", "erfeer,rf", "erfer"];
data = data.map(function (x) {
    return /""/g.test(x) ? x.replace(/""/g, "") : x
});

function fakeReplace(data, substr, newstr) {

//should show   ["erf,", "erfeer,rf", "erfer"];      
div.append("data before match replace = " + data);

    div.append("\<br>");
    div.append("substr = " + substr);
    div.append("\<br>");
    div.append("newstr = " + newstr);
    div.append("\<br>");

    return data.split(substr).join(newstr);
}

fakeReplace(data, "erf", "blue");

//should show ["blue,", "blueeer,rf", "blueer"];
div.append("data after fakeReplace is executed = " + data);

有关过滤器的文档,请访问:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter