javascript 如何比较两个对象中的两个相等值

avwztpqn  于 2023-05-16  发布在  Java
关注(0)|答案(3)|浏览(177)

我想比较这两个数组,以获得食物中不存在的水果的ID和名称,并将结果保存在新数组中。
例如,我们在这里有橙子存在于food数组中,结果应该存储不存在于food中的水果的id和名称。(苹果和樱桃)

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'}
]
//Code that I tried:
var res = {};
var dep_data = [];
for (var j = 0; j < fruits.length; j++) {
  for (var d = 0; d < food.length; d++) {
    if (parseInt(fruits[j].id) != parseInt(food[d])) {
      res["id"] = fruits[j].id;
      res["name"] = fruits[j].name;
      dep_data.push(res);
    }
  }
}
console.log(dep_data)
imzjd6km

imzjd6km1#

一个更简洁有效的版本是首先对foods进行map处理,得到一个名称数组,然后通过filteringfoodNames数组中删除name值不是included的fruits对象,创建一个新数组。

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 foodNames = food.map(f => f.food_name);
const notInFood = fruits.filter(f => !foodNames.includes(f.name));

console.log(notInFood);
pepwfjgg

pepwfjgg2#

你可以使用复杂度为O(n + m)的Set,比嵌套循环的O(n * m)更有效。

var foodSet = new Set(food.map(item => item.food_name));
for(var j=0; j < fruits.length; j++){
    if(!foodSet.has(fruits[j].name)){
        dep_data.push({id: fruits[j].id, name: fruits[j].name});
    }
}
hsgswve4

hsgswve43#

const newArr = [];
for (let i = 0; i < fruits.length; i++) {
  const findElement = food.find((obj) => obj.food_name === 
    fruits[i].name);
   if (!findElement) newArr.push(fruits[i]);
}

相关问题