【问题标题】:JS - If statement with many conditionsJS - 有很多条件的 If 语句
【发布时间】:2015-08-14 21:08:58
【问题描述】:

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

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

但是当我这样做时,由于某种原因它不会同时捕获这两种情况。有什么更简单的方法来做到这一点?

【问题讨论】:

  • 你需要if (arr[i] !== false &amp;&amp; arr[i] !== "") NOT ||
  • 提示|| 表示 OR &amp;&amp; 表示 AND.
  • 我不认为这段代码有什么问题吗?我也经常有很多 if 语句。
  • 我不认为你理解一个值是“假”的意思是一个假值评估为false。关键是要避免做你刚刚做的事情。查看@Nina Scholz 的回答

标签: javascript if-statement


【解决方案1】:

您使用的是 OR,应该使用 AND:

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

【讨论】:

    【解决方案2】:

    @Nina Scholz 的答案更易读的版本是在不依赖短路的情况下明确检查真实性。

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

    当然,根据你的情况,你可以使用filter

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

    【讨论】:

    • 比较真实?真的吗?
    • @NinaScholz 我想让他清楚我在做什么。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      你应该使用过滤器。

      var arr1 = [0, 1, false, '', 'zero', null];
      var arr2 = arr1.filter(function (item) {
        return !!item;
      });
      console.log(arr2); // [1, 'zero']
      

      过滤器的文档可以在这里找到:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-28
        • 2014-10-20
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        • 2019-12-23
        • 2023-03-31
        • 1970-01-01
        相关资源
        最近更新 更多