【问题标题】:Handling Conditional Logic When an Array Has One Value Even If It's an Empty String?当数组只有一个值时处理条件逻辑,即使它是一个空字符串?
【发布时间】:2018-05-28 01:18:00
【问题描述】:

我有一种情况,用户可以输入邮政编码值来过滤某些数据。我还设置了这个过滤器,以便保留最后的值,这样如果用户重新启用过滤器,这些值就可以在重新启用过滤器时立即再次过滤数据。

我遇到的问题是,即使过滤器已被清除,我的过滤器值也会被传递。因为这是通过 POST 请求的主体从我们的 Angular 应用程序传递给 Mongoose/MongoDB 的一组值,所以有效过滤的是 ['']。这让我返回零结果 - 并不奇怪。

所以我试图提出一些条件检查来防止过滤器在结果为[''] 时触发。我不能简单地基于 array.length 排除,因为即使这个值也被认为是一个长度为 1 的数组——如果有实际的邮政编码['77799'],情况也是如此。这是我尝试过的:

    if ( zipArray !== [] && zipArray !== [''] && zipArray[0] !== '') {   
      console.log(zipArray);
      console.log(zipArray.length);
      this.sendZipcode.emit(zipArray);
    }

我还能在这里尝试什么来排除在zipArray === [''] 时发出的值,它仍然会接受一个像['77799'] 这样的值的数组?我可以检查数组中存在的任何元素中的最少字符数吗?有什么建议吗?

【问题讨论】:

  • zipArray === [''] 不会像您认为的那样做。它比较引用,zipArray 永远不会等于一个新数组。
  • 那么您如何建议我有条件地排除 [''] 的结果不被通过?
  • zipArray[0] !== '' 工作。
  • 如果你往上看,我现在就有了。似乎并不能阻止值的发出。
  • 因为你的另外两个条件。他们失败了,因此整体是错误的。摆脱他们

标签: javascript arrays angular mongoose conditional


【解决方案1】:

您可以使用 filter 从数组中删除所有不需要的值,然后检查您是否仍有有效的邮政编码要发送到您的服务器:

let zipArrayWithNoEmptyZip = zipArray.filter(zip => zip.length > 0);
if (zipArrayWithNoEmptyZip.length > 0) {   
  console.log(zipArrayWithNoEmptyZip);
  console.log(zipArrayWithNoEmptyZip.length);
  this.sendZipcode.emit(zipArrayWithNoEmptyZip);
}

【讨论】:

  • 这里测量的第二个 .length 是多少?
  • 第一个长度检查邮政编码字符串,第二个检查过滤后的数组是否为空
  • 正确!我的第一个意图是发送过滤后的数组,但我没有这样做。让我更新:-)
  • 谢谢,这也是一个很好的解决方案。经过研究,我发现“.find”也是一个有效的解决方案,正如@Li357 指出的那样。
  • 将是 if (zipArray.find(zip => zip.length > 0) !== undefined) 然后保留您的代码。我更喜欢过滤的解决方案,它将干净的数组发送到您的服务器。
猜你喜欢
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2018-08-06
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多