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

如何对比对象相等值?筛选food数组中未包含的水果信息

解决数组对象对比筛选问题

原代码存在的问题

  1. 对比逻辑错误:错误地将food[d](整个对象)与fruits[j].id做对比,实际需要匹配的是水果的name和food数组的food_name字段。
  2. 循环逻辑混乱:只要单次对比不相等就往结果数组推数据,导致同一个水果被重复添加多次。
  3. 对象引用复用:始终使用同一个res对象,最终数组里的所有元素都会指向最后一次修改的对象。

正确实现方案(高效版)

先把food数组中的所有food_name提取到Set中(查找效率O(1)),再过滤出fruits中未在food里出现的水果:

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

const food=[{id: '1', creation_date: '2023-05-13 09:46:25', created_by: '1'},
{id: '1', food_name: 'Orange'},
{id: '2', food_name: 'Bread'},
{id: '3', food_name: 'Chees'},
{id: '4', food_name: 'Milk'},
{id: '5', food_name: 'Salt'}
];

// 提取所有有效的food_name并存入Set
const foodNames = new Set(food.map(item => item.food_name).filter(Boolean));
// 筛选并提取目标数据
const dep_data = fruits
  .filter(fruit => !foodNames.has(fruit.name))
  .map(fruit => ({ id: fruit.id, name: fruit.name }));

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

基于for循环的实现(贴近原代码写法)

如果习惯用for循环,可按以下方式改进:

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

const food=[{id: '1', creation_date: '2023-05-13 09:46:25', created_by: '1'},
{id: '1', food_name: 'Orange'},
{id: '2', food_name: 'Bread'},
{id: '3', food_name: 'Chees'},
{id: '4', food_name: 'Milk'},
{id: '5', food_name: 'Salt'}
];

const dep_data = [];
const foodNames = [];

// 先收集所有有效的food_name
for (let d = 0; d < food.length; d++) {
  if (food[d].food_name) {
    foodNames.push(food[d].food_name);
  }
}

// 遍历水果,筛选未在food中出现的项
for (let j = 0; j < fruits.length; j++) {
  const currentFruit = fruits[j];
  let isNotInFood = true;
  
  for (let name of foodNames) {
    if (currentFruit.name === name) {
      isNotInFood = false;
      break;
    }
  }
  
  if (isNotInFood) {
    // 每次创建新对象,避免引用复用问题
    dep_data.push({ id: currentFruit.id, name: currentFruit.name });
  }
}

console.log(dep_data);

内容的提问来源于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 01:39:56