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

如何在JavaScript嵌套数组中按ID数组匹配并生成指定格式结果?

解决方案:根据ID数组匹配嵌套数组生成状态结果

嘿,我来帮你搞定这个问题!你想要根据id数组在嵌套的oparr里匹配,生成带有off/off1状态的指定格式结果对吧?之前用Underscore.js的indexOf、find、findWhere没得到期望格式,那咱们一步步来实现:

核心思路

我们需要遍历每个目标ID,判断它是否存在于oparr的off数组中,然后按照规则设置off和off1的布尔值,最后把结果整理成要求的结构。

Underscore.js实现代码

var id = [1,2];
var oparr = [{ "off": [{ id: 1, val: "aaa" }, { id: 3, val: "bbb" } ] }, { "off1": [{ id: 2, val: "cccc" }] } ];

// 先从oparr中提取出off和off1的子数组,方便后续查找
var offList = oparr[0].off;
var off1List = oparr[1].off1;

// 遍历id数组,生成每个ID对应的状态对象
var finalResult = _.map(id, function(currentId) {
    // 用findWhere检查当前ID是否在off数组中,转成布尔值
    var existsInOff = !!_.findWhere(offList, { id: currentId });
    return {
        id: currentId,
        off: existsInOff,
        off1: !existsInOff
    };
});

// 包装成要求的最终格式
var arr = { finalval: finalResult };
console.log(arr);

代码解释

  1. 提取子数组:先把oparr里的off和off1数组单独拿出来,避免每次查找都要嵌套访问,让代码更清晰。
  2. 遍历ID数组:用_.map遍历目标id数组,对每个ID生成对应的结果对象。
  3. 判断存在性:用_.findWhere查找当前ID是否在off数组中,用!!把查找结果转成布尔值(找到就是true,没找到就是false)。
  4. 设置状态:根据存在性结果,off直接用这个布尔值,off1取反即可,完全符合你的规则。

运行这段代码后,就能得到你想要的结果:

{ finalval: [ { id: 1, off: true, off1: false }, { id: 2, off: false, off1: true }] }

内容的提问来源于stack exchange,提问作者Elamparithi.P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:30:04