把两个数组按照其中一个数组的顺序 进行排序?

将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
    }
]
阅读 2.6k
4 个回答
let sortIndex = twoArr.map(item => item.intID)

oneArr.sort((a, b) => sortIndex.indexOf(a.intID) - sortIndex.indexOf(b.intID))
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;
});
  const newArr = [];
  twoArr.forEach((twoE) => {
    oneArr.forEach((oneE) => {
      if (twoE.intID === oneE.intID) {
        newArr.push(oneE);
      }
    });
  });

  console.log(newArr);
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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题