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

JavaScript中如何过滤嵌套对象获取sales中amount小于5的商品

正确实现代码

你原有代码的核心问题有两点:

  1. filter回调中错误访问了全局数组products的sales属性,应该访问当前遍历到的单个商品对象的sales属性
  2. sales是存储多条销量记录的数组,无法直接读取amount属性,需要遍历该数组做条件判断

如果你的需求是只要存在任意一条销量记录的amount值小于5,就保留对应商品,可以用Array.some()搭配filter实现,代码如下:

const products = [
    { id: 1, name: "bread", value: 2.0, category: "bakery", "sales":[{"day": "07/04/2021", "amount": 12}, {"day": "10/04/2021", "amount": 18}] },
    { id: 2, name: "apple", value: 6.5, category: "fruit", "sales":[{"day": "07/04/2021", "amount": 4}, {"day": "10/04/2021", "amount": 18}] },
    { id: 3, name: "pizza", value: 2.0, category: "food", "sales":[{"day": "07/04/2021", "amount": 5}, {"day": "10/04/2021", "amount": 18}]} ,
    { id: 4, name: "cheese", value: 7.0, category: "bakery", "sales":[{"day": "07/04/2021", "amount": 12}, {"day": "10/04/2021", "amount": 5}] },
    { id: 5, name: "milk", value: 2.2, category: "food", "sales":[{"day": "07/04/2021", "amount": 12}, {"dia": "10/04/2021", "amount": 3}]}
  ];

// 筛选存在任意一次销量小于5的商品
const onlyAmountLess5 = products.filter(product => {
  return product.sales.some(saleItem => saleItem.amount < 5)
})

console.log(onlyAmountLess5)
// 输出结果为id=2的apple、id=5的milk两个商品

如果你的需求是商品的所有销量记录的amount值都小于5才保留,把上述代码里的some方法替换为every即可。

逻辑说明

  • filter方法遍历整个products数组,对每个商品执行回调函数,回调返回true的商品会被保留到结果数组
  • some方法会遍历当前商品的sales数组,只要有一条销量记录满足amount <5就返回true,否则返回false
  • every方法会遍历当前商品的sales数组,只有所有销量记录都满足amount <5才返回true,否则返回false

内容的提问来源于stack exchange,提问作者TulioVargas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:06:02