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遮挡了;问题出现的环境背 ...