将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
}
]
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);
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;
});