You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选满足指定物品库存条件的商店数组并返回布尔值?

问题与解决方案

原始数据

我们有如下商店对象数组:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:15:32