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

基于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" }]
代码说明
  1. Object.keys(objX)[0]:因为每个对象只有一个属性,直接取第一个属性名作为唯一id。
  2. y.find(...):精准匹配y中与当前x对象id相同的对象。
  3. 最终判断逻辑:确保y中存在对应id,同时两者属性值不同,才将该x对象纳入结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:06:36