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

如何筛选出双值均存在于另一JSON数组Code中的JSON元素?

问题分析与解决思路

原代码的问题

  1. 数值类型误用includes方法:wechselwirkungen[i][1]是数值(比如1234),而includes是数组/字符串的专属方法,直接调用会抛出错误;
  2. 逻辑判断错误:你试图让同一个medArray[j].Code同时匹配wechselwirkungen[i][1]和wechselwirkungen[i][2],这显然不可能(单个Code只能对应一个值),正确逻辑应该是两个值分别存在于medArray的Code集合中;
  3. 未收集返回结果:原代码仅做了日志输出,没有将符合条件的元素收集并返回。

修正方案

核心思路

  1. 先把medArray中的所有Code提取到一个Set集合中,利用Set的O(1)查找效率提升性能;
  2. 遍历wechselwirkungen数组,对每个元素检查它的两个值是否都在Code集合中,收集符合条件的元素并返回。

完整代码

function findPairs(medArray, wechselwirkungen) {
  // 提取所有Code到Set中,实现快速查找
  const codeSet = new Set(medArray.map(item => item.Code));
  
  // 筛选出两个值都在Code集合中的元素
  return wechselwirkungen.filter(item => {
    const val1 = item["1"];
    const val2 = item["2"];
    return codeSet.has(val1) && codeSet.has(val2);
  });
}

// 测试用例
const wechselwirkungen = [{"1": 1234, "2": 5678}, {"1": 2222, "2": 1111}, {"1": 2222, "2": 5678}];
const medArray = [{"Code": 1234}, {"Code": 5678}, {"Code": 2222}];

console.log(findPairs(medArray, wechselwirkungen));
// 输出:[{"1": 1234, "2": 5678}, {"1": 2222, "2": 5678}]

补充说明

  • Set的优势:相比嵌套循环遍历medArray检查存在性,Set的has方法时间复杂度为O(1),整体时间复杂度从O(n*m)降低到O(n+m),数据量越大效率提升越明显;
  • 函数通用性优化:把wechselwirkungen作为参数传入,避免依赖全局变量,让函数可以复用在不同的数组组合场景;
  • 代码可读性:使用数组filter方法替代嵌套循环,逻辑更直观,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:42:42