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

如何根据两个JSON的ID匹配结果返回含/不含匹配ID的数据?

实现匹配与不匹配数据的过滤逻辑

我来帮你搞定这个需求~首先得先修正一下你给出的sample.json里的语法问题——你写的var sample= { {id: '1'}, {id: '2'}, };是错误的,对象不能直接嵌套对象,应该改成数组格式,不然没法正常处理哦。

先把两个数据源整理好(修正语法后的版本):

// details.json 对应的数组
const categoryArray = [ 
  {cid: '1', name: 'Category_1'}, 
  {cid: '2', name: 'Category_2'}, 
  {cid: '3', name: 'Category_3'}, 
  {cid: '4', name: 'Category_4'} 
];

// sample.json 修正后的数组
const sample = [{id: '1'}, {id: '2'}];

接下来,为了高效判断cid是否在sample的id列表里,我们先把sample里的所有id提取出来存到一个Set里——Set的查找效率比数组高很多,尤其是数据量大的时候:

// 提取sample中的所有id,存入Set
const sampleIds = new Set(sample.map(item => item.id));

情况1:返回与sample中id匹配的数据

我们可以用数组的filter方法,筛选出categoryArray里cid存在于sampleIds中的项:

const matchedData = categoryArray.filter(item => sampleIds.has(item.cid));
console.log(matchedData);
// 输出结果:[{cid: '1', name: 'Category_1'}, {cid: '2', name: 'Category_2'}]

情况2:返回与sample中id不匹配的数据

同样用filter方法,只是判断条件反过来,筛选cid不在sampleIds中的项:

const unmatchedData = categoryArray.filter(item => !sampleIds.has(item.cid));
console.log(unmatchedData);
// 输出结果:[{cid: '3', name: 'Category_3'}, {cid: '4', name: 'Category_4'}]

对你现有代码的小说明

你之前写的const allIds = res.data.map(el => { return {id: el.id} })会返回一个包含对象的数组,比如[{id:'1'}, {id:'2'}],直接用id===allIds是没法判断的——因为对象和数组是引用类型,不能直接用===比较内容,所以我们换成用Set来存储id值,就能高效判断啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:37:54