javascript - 把两个数组按照其中一个数组的顺序 进行排序?
问题描述:
将oneArr 按照 twoArr 的顺序进行排序,而且两个数组可能一样长,也可能不一样长,
twoArr 是基于oneArr选中的数据,oneArr 是接口返回的数据,
oneArr = [ { "intID": 4070479, "sourceTableMetaId": 225378, "strColumnNameEN": "id", "strColumnDescZHCN": "ID", "index": 0, "_index": 0 }, { "intID": 4070480, "sourceTableMetaId": 225378, "strColumnNameEN": "kpi_id", "strColumnDescZHCN": "", "index": 1, "_index": 1 }, { "intID": 4070481, "sourceTableMetaId": 225378, "strColumnNameEN": "kpi_code", "strColumnDescZHCN": "xxx", "index": 2, "_index": 2 }, { "intID": 4070482, "sourceTableMetaId": 225378, "strColumnNameEN": "project_code", "strColumnDescZHCN": "xxxxx", "index": 3, "_index": 3 }, { "intID": 4070481, "sourceTableMetaId": 225373, "strColumnNameEN": "key_code", "strColumnDescZHCN": "xxxxxxxxxx", "index": 4, "_index": 4 } ]
twoArr = [ { "intID": 4070479, "sourceTableMetaId": 225378, "strColumnNameEN": "id", "strColumnDescZHCN": "ID", "index": 0, "_index": 0 }, { "intID": 4070480, "sourceTableMetaId": 225378, "strColumnNameEN": "kpi_id", "strColumnDescZHCN": "", "index": 1, "_index": 1 }, { "intID": 4070482, "sourceTableMetaId": 225378, "strColumnNameEN": "project_code", "strColumnDescZHCN": "xxxxx", "index": 3, "_index": 3 }, { "intID": 4070481, "sourceTableMetaId": 225378, "strColumnNameEN": "kpi_code", "strColumnDescZHCN": "xxxxxxx", "index": 2, "_index": 2 } ]
第 1 个答案:
let sortIndex = twoArr.map(item => item.intID) oneArr.sort((a, b) => sortIndex.indexOf(a.intID) - sortIndex.indexOf(b.intID))
第 2 个答案:
let order = new Map(twoArr.map((item, index) => [item.intID, index])); oneArr.sort((a, b) => { let orderA = order.has(a.intID) ? order.get(a.intID) : Infinity; let orderB = order.has(b.intID) ? order.get(b.intID) : Infinity; return orderA - orderB; });
第 3 个答案:
const newArr = []; twoArr.forEach((twoE) => { oneArr.forEach((oneE) => { if (twoE.intID === oneE.intID) { newArr.push(oneE); } }); }); console.log(newArr);
第 4 个答案:
const cache = {}; oneArr.sort((a, b) => { const aId = a.intID, bId = b.intID; let aIndex = cache[aId] ?? -1; let bIndex = cache[bId] ?? -1; if (aIndex < 0 || bIndex < 0) { for (let i = 0; i < twoArr.length; ++i) { const id = twoArr[i].intID; if (aId === id) aIndex = cache[aId] = i; if (bId === id) bIndex = cache[bId] = i; if (aIndex >= 0 && bIndex >= 0) break; } } return aIndex - bIndex; }); console.log(oneArr);
问题描述在正式发布的微信小程序中,使用的是自定义的tabbar,ios中的悬浮home键和tabbar重合的部分都被tabbar遮挡了;问题出现的环境背 ...