【发布时间】:2017-01-21 17:20:32
【问题描述】:
在 Javascript 中,我如何确保年龄数组有两个 年龄 10 和 18 而不仅仅是一个。
var ages = [3, 10, 18, 20];
ages.filter(age => age === 10 || age === 18); // returns 10 and 18
ages.filter(age => age === 10 && age === 18); // returns null
&& 不能确保两者都存在,因为它返回 null。我知道我可以使用 2 个不同的 ages.find/filter 并检查组合结果,但我想知道是否有更优雅的方式在单个语句中执行此操作。
为了澄清,在ages 数组中,如果我检查10(存在)和21(不存在),它应该返回null 或false,就像其中之一一样不存在。
【问题讨论】:
-
new Set(ages.filter(age => age === 10 || age === 18)).size >= 2 -
我认为最好使用 2 个不同的过滤器,因为在一次迭代中,年龄可以只是一个数字,10 或 18,所以如果你使用 &&,其中一个总是错误的。跨度>
-
@SpencerWieczorek 不是重复的,我试图确保两者同时存在,而不仅仅是一个......
-
检查两个只是检查一个两次。这与查找元素
a的方式相同,而元素b是查找元素a的副本。所以除了if ( ages.indexOf( 10 ) > -1 ),它只是if ( ages.indexOf( 10 ) > -1 && ages .indexOf( 18 ) > -1)。这就是为什么它是重复的。
标签: javascript arrays