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

如何对比两个JSON数组,筛选符合指定条件的水果数据

数组筛选问题解决方法

需求说明

从fruits数组中筛选出符合以下条件的水果(仅保留id和name字段):

  • 水果名称未出现在food数组的food_name中,或者
  • 水果名称出现在food中,但对应的food项deleted值为"1"

根据示例数据,最终结果应包含Apple(在food中但已标记删除)和Cherry(未在food中出现)。

原有代码问题

  1. fruits数组的元素没有deleted字段,fruits[j].deleted !== "1"这个判断无效,会始终返回true
  2. 逻辑仅处理了“未出现在food中”的情况,未覆盖“在food中但已标记删除”的场景,不符合需求

正确实现代码

const fruits = [{id: '1', name: 'Apple'},
    {id: '2', name: 'Orange'},
    {id: '3', name: 'Cherry'}];

const food=[{id: '1', food_name: 'Orange', deleted:"0"},
    {id: '2', food_name: 'Bread' ,deleted:"0"},
    {id: '3', food_name: 'Cheese', deleted:"0"},
    {id: '4', food_name: 'Apple', deleted:"1"},
    {id: '5', food_name: 'Salt',deleted:"0"}
];

// 收集food中未被删除(deleted="0")的食物名称
const validFoodNames = new Set(
  food.filter(item => item.deleted === "0").map(item => item.food_name)
);

// 筛选符合条件的水果并提取所需字段
const dep_data = fruits
  .filter(fruit => !validFoodNames.has(fruit.name))
  .map(fruit => ({ id: fruit.id, name: fruit.name }));

console.log(dep_data);
// 输出结果: [{id: '1', name: 'Apple'}, {id: '3', name: 'Cherry'}]

代码说明

  • 先通过filter和map获取food中有效(未被删除)的食物名称集合,利用Set的快速查找特性提升效率
  • 用filter筛选出名称不在有效食物集合里的水果,再用map提取需要的id和name字段,得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:22:42