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

对比不同长度对象数组:判断jobId缺失或current值不满足条件

数组对象对比逻辑修复

给定数组

test数组

var test = [{
    jobId: 1,
    requiredNumber: 1,
    actualReq: 1,
  },{
    jobId: 2,
    requiredNumber: 1,
    actualReq: 1,
  },{
    jobId: 3,
    requiredNumber: 1,
    actualReq: 1,
  },{
    jobId: 4,
    requiredNumber: 1,
    actualReq: 1,
  }]

testArr数组

var testArr = [{ jobId: 1, current: 1 },
 { jobId: 2, current: 1 },
 { jobId: 4, current: 1 }]

需求

遍历test数组,只要满足以下任一条件,返回true(标记存在问题):

  • 当前jobId在testArr中不存在(比如示例中的jobId=3)
  • testArr中对应jobId的current值小于test中的actualReq值

原代码问题

你写的嵌套循环逻辑存在两个核心问题:

  1. 标记值被反复覆盖:每次内层循环都会修改y的值,比如处理完jobId=3时y被设为true,但后续处理jobId=4时又会把y改回false,最终覆盖了正确结果。
  2. 无提前终止逻辑:只要找到一个符合条件的项,就可以直接返回结果,不需要继续遍历,原代码却会走完所有循环。

原代码:

var y = false;
for (let i = 0; i < test.length; i++) {
  for (let j = 0; j < testArr.length; j++) {
    if (test[i].jobId === testArr[j].jobId) {
      if (test[i].actualReq <= testArr[j].current) {
        y = false
      } else {
        y =true
      }
    } else {
      y = true;
    }
  }
}
console.log(y);

正确实现

方法一:映射表+循环(高效)

先把testArr转成以jobId为键的映射表,避免嵌套循环,提升效率:

// 构建testArr的jobId映射表
const jobCurrentMap = new Map();
testArr.forEach(item => jobCurrentMap.set(item.jobId, item.current));

let hasProblem = false;
for (const job of test) {
  const currentVal = jobCurrentMap.get(job.jobId);
  // 找不到对应jobId,或者current小于actualReq,标记为true并终止循环
  if (currentVal === undefined || currentVal < job.actualReq) {
    hasProblem = true;
    break;
  }
}
console.log(hasProblem); // 输出true,符合预期

方法二:数组some方法(简洁)

利用数组some方法,只要有一项满足条件就返回true,代码更简洁:

const jobCurrentMap = new Map(testArr.map(item => [item.jobId, item.current]));
const hasProblem = test.some(job => {
  const currentVal = jobCurrentMap.get(job.jobId);
  return currentVal === undefined || currentVal < job.actualReq;
});
console.log(hasProblem); // 输出true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:25:30