按索引对数组进行排序

Pie*_*ska 3 javascript arrays indexing

看下面的代码:

    var exemples =  [
            {
                'name'     : 'd',
                'index'    : 3
            },
            {
                'name'     : 'c',
                'index'     : 2
            },
            {
                'name'     : 'a',
                'index'    : 0
            },
            {
                'name'     : 'b',
                'index'    : 1
            }
        ];

      const list = exemples.map((exemple, index, array) => exemple.name)

      console.log(list)
Run Code Online (Sandbox Code Playgroud)

它给了我那个数组:

["d", "c", "a", "b"]
Run Code Online (Sandbox Code Playgroud)

我想尊重索引并得到这样的结果:

["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud)

听起来像是一个基本问题,但我需要你的帮助。谢谢。

Str*_*rnd 7

首先通过自定义排序函数对列表进行排序,该函数将比较索引,然后进行映射。

    var exemples =  [
            {
                'name'     : 'd',
                'index'    : 3
            },
            {
                'name'     : 'c',
                'index'     : 2
            },
            {
                'name'     : 'a',
                'index'    : 0
            },
            {
                'name'     : 'b',
                'index'    : 1
            }
        ];

      const list = exemples.sort((a,b) => a.index - b.index).map((exemple, index, array) => exemple.name)

      console.log(list)
Run Code Online (Sandbox Code Playgroud)


Pan*_*kla 6

您不需要排序和过滤。使用Array#reduce。只需一次迭代,您就可以获得排序后的元素。这比先排序再过滤效率更高。这将为您提供 O(n) 解决方案。请参阅下面的示例。

var exemples = [{
    'name': 'd',
    'index': 3
  },
  {
    'name': 'c',
    'index': 2
  },
  {
    'name': 'a',
    'index': 0
  },
  {
    'name': 'b',
    'index': 1
  }
];

var ans = exemples.reduce(function (r,v) {
  r[v.index] = v.name;
  return r;
}, []);

console.log(ans);
Run Code Online (Sandbox Code Playgroud)