如何筛选满足指定物品库存条件的商店数组并返回布尔值?
问题与解决方案
原始数据
我们有如下商店对象数组:
let store = [ { id: 1, name: "store1", items: { pen: 0, apple: 1, chocolate: 0 } }, { id: 2, name: "store2", items: { pen: 0, apple: 0, chocolate: 0 } }, { id: 3, name: "store3", items: { pen: 0, apple: 1, chocolate: 1 } }, ];
需求
筛选条件为 ["apple", "chocolate"],需要:
- 找出满足「条件列表中至少一个物品库存数量大于0」的商店对象;
- 或获取每个商店是否符合条件的布尔值结果。
原代码问题
你之前的代码无法得到正确结果,核心原因:
store.filter(store => criteria.forEach(i => store.items[i] > 0))
forEach 方法没有返回值,导致filter的回调函数始终返回 undefined(被判定为false),最终没有任何商店被筛选出来。
正确实现方案
方案1:筛选符合条件的商店对象
使用 Array.some() 方法,它会遍历条件数组,只要有一个元素满足条件就返回true,完美匹配「至少一个」的需求:
const criteria = ["apple", "chocolate"]; const validStores = store.filter(shop => criteria.some(item => shop.items[item] > 0)); // 输出结果:包含store1和store3的数组
方案2:获取每个商店的布尔值结果
如果需要得到每个商店是否符合条件的布尔值数组,用 map 替代 filter:
const criteria = ["apple", "chocolate"]; const isStoreValid = store.map(shop => criteria.some(item => shop.items[item] > 0)); // 输出结果:[true, false, true]
补充说明
some 方法在找到第一个满足条件的元素后会立即停止遍历,相比遍历全部元素的方法效率更高,非常适合这类「存在性检查」的场景。
内容的提问来源于stack exchange,提问作者simpledev
相关产品推荐
相关产品推荐

