JS - 带有多个条件的If语句

3

我的目标是确定一个数组是否包含任何假元素,并创建一个新的不包含这些元素的数组。我想出了一个非常丑陋的函数,但我就是想不出更好的写法。

    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] !== "")

但是当我这样做时,由于某些原因它无法捕获两种条件。有没有更简单的方法来做到这一点?


2
你需要使用 if (arr[i] !== false && arr[i] !== "") 而不是 ||。 - danielmhanover
提示: || 表示 && 表示 - Script47
我认为这段代码没有任何问题?我经常也有很多if语句。 - bodacydo
我认为你不理解“falsey”值的含义,即falsey值会被评估为false。整个重点在于避免做你刚才所做的事情。请参见@Nina Scholz的答案。 - Luke
4个回答

1
您正在使用 OR,应改为使用 AND:
if (arr[i] !== false && arr[i] !== "")

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

1
@Nina Scholz的回答更易读的版本是明确检查真实性而不依赖短路。
if (arr[i]) { newArray.push(arr[i]); }

当然,对于你的情况,你可以使用 filter
newArr = arr.filter(function(el){ return el == true; });

1
与真实比较?真的吗? - Nina Scholz
@NinaScholz 我想让他清楚地知道我在做什么。 - Luke

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接