按索引排序数组[重复]

Posted

技术标签:

【中文标题】按索引排序数组[重复]【英文标题】:Sort by index an array [duplicate] 【发布时间】:2017-11-01 11:33:02 【问题描述】:

看下面的代码:

    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"]

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

【问题讨论】:

【参考方案1】:

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

    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)

【讨论】:

【参考方案2】:

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

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)

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于按索引排序数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何按值对数组进行排序(排序)? *有一个转折*

按特定键的内部数组的值对PHP二维数组进行排序[重复]

python面试题- 二分法查找给定一个已排序的非重复整数数组和一个目标值,如果找到目标,则返回索引。

JavaScript按属性值对字典进行排序[重复]

注意:if()中未定义的索引按结构排序[重复]

按日期排序对象数组[重复]