根据 strArray1 对 objArray2 进行排序

项目中遇见的问题,要求一个满足功能的算法,且时间复杂度尽量小
已知两个数组 strArray1objArray2:

const strArray1 = [
    'a',
    'b',
    'c',
    ...
    'z'
]

const objArray2 = [
    {
        str: 'c',
        ...
    },
    {
        str: 'a',
        ...
    },
    {
        str: 'z',
        ...
    },
    ...
    {
        str: 'b',
        ...
    }
]

这两个数组的长度是一样的,objArray2 中元素与 strArray1 元素一一对应,但是乱序
现要求把 objArray2 根据 strArray1 的顺序进行排序:

return = [
    {
        str: 'a',
        ...
    },
    {
        str: 'b',
        ...
    },
    {
        str: 'c',
        ...
    },
    ...
    {
        str: 'z',
        ...
    }
]
阅读 1.4k
1 个回答
function sortArr(strArray1, objArray2) {
  let rst = [...objArray2]

  // 映射strArray1:{a: 0, b: 1, c: 2, d: 3, ...}
  let obj = strArray1.reduce((iter, val, idx) => {
    iter[val] = idx 
    return iter
  }, {})

  // 利用sort方法直接排序
  rst.sort((a, b) => obj[a.str] - obj[b.str])

  return rst
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题