如何在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);
代码解释
- 提取子数组:先把
oparr里的off和off1数组单独拿出来,避免每次查找都要嵌套访问,让代码更清晰。 - 遍历ID数组:用
_.map遍历目标id数组,对每个ID生成对应的结果对象。 - 判断存在性:用
_.findWhere查找当前ID是否在off数组中,用!!把查找结果转成布尔值(找到就是true,没找到就是false)。 - 设置状态:根据存在性结果,
off直接用这个布尔值,off1取反即可,完全符合你的规则。
运行这段代码后,就能得到你想要的结果:
{ finalval: [ { id: 1, off: true, off1: false }, { id: 2, off: false, off1: true }] }
内容的提问来源于stack exchange,提问作者Elamparithi.P
相关产品推荐
相关产品推荐

