当数组只有一个值时处理条件逻辑,即使它是一个空字符串?
Posted
技术标签:
【中文标题】当数组只有一个值时处理条件逻辑,即使它是一个空字符串?【英文标题】: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] !== ''
工作。
如果你往上看,我现在就有了。似乎并不能阻止值的发出。
因为你的另外两个条件。他们失败了,因此整体是错误的。摆脱他们
【参考方案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)
然后保留您的代码。我更喜欢过滤的解决方案,它将干净的数组发送到您的服务器。以上是关于当数组只有一个值时处理条件逻辑,即使它是一个空字符串?的主要内容,如果未能解决你的问题,请参考以下文章
仅当它是数组中的值时才可以打印数字吗? (Java)[重复]