按索引排序数组

时间:2017-05-31 15:14:16

标签: 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)




它给了我那个数组:

["d", "c", "a", "b"]

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

["a", "b", "c", "d"]

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

3 个答案:

答案 0 :(得分:4)

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

    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)

答案 1 :(得分:2)

您无需排序和过滤。 使用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);

答案 2 :(得分:1)

您可以在映射之前对数组进行排序。 这是一个例子:

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

const list = exemples.sort((v1, v2) => v1.index - v2.index).map((v) => v.name);
console.log(list)