在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
或{ {1}},因为其中一个不存在。
答案 0 :(得分:4)
您必须使用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);