2017-05-31 35 views
0

看看下面的代碼:分類指數數組

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

首先對列表進行排序,通過自定義排序函數來比較索引,然後進行映射。

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

您可以將映射之前對數組進行排序。 下面是一個例子:

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)

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);