如何高效实现把数组按照指定的顺序排列

发布于 2022-09-06 02:39:19 字数 185 浏览 23 评论 0

数组如下:

var pageIds = [125,123,124];
var arr = [
    {pageId:123},
    {pageId:124},
    {pageId:125},
    ....
]

把数组arr按照指定的pageIds数组中的pageId值顺序排列

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

压抑⊿情绪 2022-09-13 02:39:19

sort方法只能做有一定规律的排序,~如果需要实现题主所说的按给定数字排序,我觉得这样会比较简单:
用filter方法逐个筛选出对应的数字,然后用concat方法连接起来,这两个方法都不会改变原数组,所以需要定义一个变量把结果存起来

代码如下:

    var pageIds = [125, 123, 124];
    var arr = [
        { pageId: 123 },
        { pageId: 124 },
        { pageId: 125 }
    ]
    var result = []
    for (let i = 0; i < pageIds.length; i++) {
        result = result.concat(arr.filter(m => m.pageId === pageIds[i]))
    }
    
    console.log(result)
凉城凉梦凉人心 2022-09-13 02:39:19

下面的方法是否跟题主期望一致?

arr.sort((a,b)=>{return pageIds.indexOf(a.pageId)-pageIds.indexOf(b.pageId)})
一身骄傲 2022-09-13 02:39:19

看错题目了。。

傲影 2022-09-13 02:39:19
    var result = [];
    for(var i in pageIds){
        for(var j in arr){
            if(arr[j].pageId==pageIds[i]){
                result.push(arr[j]);
                arr.splice(j,1); //减少下次arr遍历长度
                break;//中断遍历
            }
        }
    }
    
め七分饶幸 2022-09-13 02:39:19
function sort(pageIds, arr) {
  var i = 0,
    j = 0,
    tmp;
  for (i = 0; i < pageIds.length; i++) {
    for (j = i; j < arr.length; j++) {
      if (pageIds[i] == arr[j].pageId) {
        tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
      }
    }
  }
  return arr;
}
紙鸢 2022-09-13 02:39:19

基于比较的排序算法,最少的时间复杂度也是N*log(N),题主可以选择用快排等排序算法手动排序

倾城泪 2022-09-13 02:39:19

这样,两个循环就可以了。这个方法的前提是,你这个id肯定是唯一的~

var pageIds = [125,123,124];
            var arr = [
                {pageId:123},
                {pageId:124},
                {pageId:125}
            ]
            let obj = {}
            arr.map(x => {
                obj[x.pageId] = x
                return x
            })
            arr = pageIds.map(x => {
                return obj[x]
            })
            console.log('result', arr)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文