基于DynamoDB filterID,筛选两对象数组同ID异值的对象
问题分析
你当前代码里用object1 === object2直接比较对象,这是在比较对象引用而非对象内容。数组里的每个对象都是独立创建的,引用地址不同,所以object1 === object2永远返回false,导致!y.some(...)始终为true,最终会返回整个x数组,和需求不符。
解决方案
要实现需求,得先提取每个对象的唯一id(即对象的属性名),再找到y中对应id的对象,比较两者的属性值是否不同。具体逻辑如下:
- 遍历x数组进行过滤
- 提取当前对象的id和对应值
- 在y数组中查找相同id的对象
- 若y中存在该id且值不相等,就保留x中的这个对象
修正后的代码:
const x = [ { 1234: "food" }, { 5678: "animal" }, { 4444: "car" } ] const y = [ { 1234: "food" }, { 5678: "bread" }, { 4444: "car" } ] const getDifferentItems = () => { return x.filter(objX => { // 获取x当前对象的id和值 const idX = Object.keys(objX)[0]; const valueX = objX[idX]; // 在y中找到对应id的对象 const objY = y.find(obj => Object.keys(obj)[0] === idX); // 仅当y中存在该id且值不同时,保留当前x对象 return objY && objY[idX] !== valueX; }); } console.log(getDifferentItems()); // 输出: [{ 5678: "animal" }]
代码说明
Object.keys(objX)[0]:因为每个对象只有一个属性,直接取第一个属性名作为唯一id。y.find(...):精准匹配y中与当前x对象id相同的对象。- 最终判断逻辑:确保y中存在对应id,同时两者属性值不同,才将该x对象纳入结果。
内容的提问来源于stack exchange,提问作者Jorge Guerreiro
相关产品推荐
相关产品推荐

