如何根据两个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
相关产品推荐
相关产品推荐

