如何对比两个JSON数组,筛选符合指定条件的水果数据
数组筛选问题解决方法
需求说明
从fruits数组中筛选出符合以下条件的水果(仅保留id和name字段):
- 水果名称未出现在
food数组的food_name中,或者 - 水果名称出现在
food中,但对应的food项deleted值为"1"
根据示例数据,最终结果应包含Apple(在food中但已标记删除)和Cherry(未在food中出现)。
原有代码问题
fruits数组的元素没有deleted字段,fruits[j].deleted !== "1"这个判断无效,会始终返回true- 逻辑仅处理了“未出现在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
相关产品推荐
相关产品推荐

