如何根据旅客年龄数组筛选含minAge/maxAge的价格组合?
如何根据旅客年龄数组筛选符合条件的价格组合?
我有一个由对象组成的priceCombinations数组,每个对象包含minAge(最小年龄)和maxAge(最大年龄)字段;同时有一个数字类型的travelerAges(旅客年龄)数组。想要根据旅客年龄筛选出符合年龄范围的价格组合,但现有代码报错。
当前代码:
const travelerAges = [5, 10, 35, 50] priceCombinations.filter((priceCombination) => { if (priceCombination.minAge > travelerAges && priceCombination.maxAge > travelerAges) { return false } else if (priceCombination.maxAge < travelerAges) { return false } return true })
报错信息:
Operator '>' cannot be applied to types 'number' and 'number[]'
错误原因
你直接用单个数值(priceCombination.minAge/maxAge)和整个travelerAges数组做比较,这属于类型不匹配——比较运算符只能用于同类型(比如数字和数字)的对比,不能拿数字和数组直接比较。
正确实现
根据业务需求的不同,有两种常见的筛选逻辑:
1. 筛选所有旅客都适用的价格组合
要求每个旅客的年龄都落在当前价格组合的minAge和maxAge区间内(包含边界):
const travelerAges = [5, 10, 35, 50]; const validCombinations = priceCombinations.filter(combination => { return travelerAges.every(age => { return age >= combination.minAge && age <= combination.maxAge; }); });
2. 筛选至少有一个旅客适用的价格组合
只要有任意一个旅客的年龄落在当前价格组合的区间内就算符合条件:
const travelerAges = [5, 10, 35, 50]; const validCombinations = priceCombinations.filter(combination => { return travelerAges.some(age => { return age >= combination.minAge && age <= combination.maxAge; }); });
方法说明
every():数组中所有元素满足条件时返回true,否则返回falsesome():数组中至少有一个元素满足条件时返回true,否则返回false
根据你的实际业务场景选择对应的方法即可。
内容的提问来源于stack exchange,提问作者Boychik
相关产品推荐
相关产品推荐

