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

JavaScript:如何筛选对象数组中需删除的非匹配dt属性记录

实现方案

1. 获取需要删除的记录

首先把required_documents中所有的dt值提取到Set中(Set的查找效率远高于数组遍历),再过滤出existing_documents里不在这个集合中的记录:

// 提取所有需要保留的dt值
const requiredDts = new Set(required_documents.map(doc => doc.dt));

// 筛选出existing中dt不在required里的记录(即需要删除的)
const docsToDelete = existing_documents.filter(doc => !requiredDts.has(doc.dt));

执行后docsToDelete会得到你需要的[{"id":3,"dt":4}]。

2. 获取需要插入的记录

如果要同步插入required_documents中未在existing_documents匹配到的记录(比如示例中的{"id":3,"dt":3}),可以用类似逻辑:

// 提取existing中已有的dt值
const existingDts = new Set(existing_documents.map(doc => doc.dt));

// 筛选出required中dt不在existing里的记录(即需要插入的)
const docsToInsert = required_documents.filter(doc => !existingDts.has(doc.dt));

3. 按id关联的精准同步逻辑

如果你的业务是按id标识同一份文档(即id相同的是同一份文档,仅需同步dt属性),可以用更精准的匹配方式:

// 把required转成以id为键的对象,快速查找对应id的文档
const requiredById = required_documents.reduce((acc, doc) => {
  acc[doc.id] = doc;
  return acc;
}, {});

// 找出需要删除的:existing中id不存在于required,或id存在但dt不匹配的记录
const docsToDelete = existing_documents.filter(doc => {
  const requiredDoc = requiredById[doc.id];
  return !requiredDoc || requiredDoc.dt !== doc.dt;
});

// 把existing转成以id为键的对象
const existingById = existing_documents.reduce((acc, doc) => {
  acc[doc.id] = doc;
  return acc;
}, {});

// 找出需要插入的:required中id不存在于existing,或id存在但dt不匹配的记录
const docsToInsert = required_documents.filter(doc => {
  const existingDoc = existingById[doc.id];
  return !existingDoc || existingDoc.dt !== doc.dt;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:03:48