【问题标题】:Javascript - Check if 2 items exist in array [duplicate]Javascript - 检查数组中是否存在2个项目[重复]
【发布时间】: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


【解决方案1】:

你必须使用includes函数:

var ages = [3, 10, 18, 20];
console.log(ages.includes(10) && ages.includes(18));

另一种方法是使用indexOf方法:

arr.indexOf(searchElement)

arr.indexOf(searchElement, fromIndex)

var ages = [3, 10, 18, 20];
console.log(ages.indexOf(10)!=-1 && ages.indexOf(18)!=-1);

findIndex 是您可以使用的另一种方法。它的作用类似于indexOf,但有一些区别:

Array.prototype.indexOf() 需要一个值作为参数。这对于基本类型的数组很有用,例如Number、String、Boolean。

Array.prototype.findIndex() 有一个回调函数作为第一个参数。这在您拥有对象数组时特别有用。

var ages = [3, 10, 18, 20];
var bool=ages.findIndex(a=>a==10)!=-1 && ages.findIndex(a=>a==18)!=-1;
console.log(bool);

【讨论】:

  • 像魅力一样工作,感谢您提供两种方式:)
  • 而不是使用findIndex() != -1,我宁愿使用some()。 ages.some(v => v === 10) && ages.some(v => v === 18)
  • 感谢您的意见!如果你愿意,你可以在我的答案中包含 sugestion。好点。
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
相关资源
最近更新 更多