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

数组对比提取不匹配项:如何完整获取成对的模块代码与学分?

数组对比提取不匹配项:如何完整获取成对的模块代码与学分?

嗨,我完全懂你的困扰!你现在的问题核心在于——你的数组元素是成对绑定的(每两个元素一组:学分+模块代码),但你当前的代码把每个元素单独拿出来对比,这就导致当其他模块有相同学分(比如案例里的3)时,对应的学分就被误过滤掉了,只留下了模块代码。

咱们得换个思路:既然数据是成对的,那就要把每组数据当成一个整体来对比,而不是拆分单个元素。

解决方案思路

先把两个原始数组转换成键值对结构(比如用Map),用模块代码作为键,对应的学分作为值,这样就能把每组数据牢牢绑定在一起。之后对比这两个Map,找出只在其中一个Map里存在的模块,再把对应的学分和模块代码组合成你想要的数组格式。

具体代码实现

先写一个辅助函数,把你的数组转换成Map:

function arrayToModuleMap(arr) {
  const moduleMap = new Map();
  // 每次步进2,处理成对的学分和模块代码
  for (let i = 0; i < arr.length; i += 2) {
    const credit = arr[i];
    const moduleCode = arr[i + 1];
    moduleMap.set(moduleCode, credit);
  }
  return moduleMap;
}

然后用这个函数处理你的两个数组,再找出不匹配的成对数据:

// 你的原始数组
const moduleAndCreditByUser = ['6', 'sjfru1', '3', 'nfu3ai', '3', 'sgvnfs'];
const moduleToUpdate = ['3', 'sgvnfs', '6', 'sjfru1'];

// 转换成Map结构
const userModuleMap = arrayToModuleMap(moduleAndCreditByUser);
const updateModuleMap = arrayToModuleMap(moduleToUpdate);

const unmatchedPairs = [];

// 找出用户数组中有,但更新数组中没有的模块(也就是你要的目标数据)
userModuleMap.forEach((credit, moduleCode) => {
  if (!updateModuleMap.has(moduleCode)) {
    unmatchedPairs.push(credit, moduleCode);
  }
});

// 如果你还需要找出更新数组中有,但用户数组中没有的模块,可以取消下面注释
// updateModuleMap.forEach((credit, moduleCode) => {
//   if (!userModuleMap.has(moduleCode)) {
//     unmatchedPairs.push(credit, moduleCode);
//   }
// });

console.log(unmatchedPairs); // 输出:['3', 'nfu3ai']

为什么这个方法可行?

通过Map把每个模块和它的学分绑定成一个整体后,我们对比的就是整个模块+学分的组合,而不是单个的数字或字符串。这样就不会出现因为其他模块有相同学分,导致目标学分被误过滤的情况了。

备注:内容来源于stack exchange,提问作者poljs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:27:33