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

JQ:利用次要数组丰富主数组并过滤价格未变更条目

解决方案

这个需求其实可以分两步高效搞定:先把次要数组转换成键值对结构方便快速查询,再遍历主数组完成筛选和字段补充。我来给你具体拆解思路和实现代码:

首先,我们可以利用reduce把次要数组转成以id为键、价格为值的对象,这样后续查找对应id的价格时不用反复遍历数组,效率会高很多。接着遍历主数组的每个元素,做以下处理:

  • 如果在次要数组里找到相同id的条目:
    • 对比两者价格,如果价格完全相等就跳过该条目(也就是移除价格未更新的项)
    • 如果价格不一样,就给主数组的条目新增c字段,值设为次要数组的价格
  • 如果在次要数组里找不到对应id的条目,就给主数组的条目新增c字段,值设为null

以下是具体的JavaScript实现代码:

const mainArray = [{"id":"a","p":5},{"id":"b","p":7},{"id":"c","p":8}];
const secondaryArray = [{"id":"a","p":9},{"id":"b","p":7},{"id":"d","p":4}];

// 将次要数组转为id映射价格的对象,方便快速查找
const secondaryPriceMap = secondaryArray.reduce((map, item) => {
  map[item.id] = item.p;
  return map;
}, {});

// 处理主数组,生成目标结果
const finalResult = mainArray.filter(item => {
  const secondaryPrice = secondaryPriceMap[item.id];
  // 若找到同id且价格相等,直接过滤掉该条目
  if (secondaryPrice !== undefined && secondaryPrice === item.p) {
    return false;
  }
  // 给当前条目添加c字段,未找到则设为null
  item.c = secondaryPrice ?? null;
  return true;
});

console.log(finalResult);
// 输出:[{"id":"a","p":5,"c":9},{"id":"c","p":8,"c":null}]

代码细节说明:

  • reduce转换数组的过程是O(n)时间复杂度,只需要遍历一次次要数组
  • filter方法同时完成了筛选(移除价格未更新项)和字段补充两个工作,避免了多次遍历主数组,逻辑更紧凑
  • 使用??空值合并运算符,能简洁处理“未找到对应id”的情况,直接给c赋值为null

这样处理后就能完美得到你想要的结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:35:19