2017-05-31 6 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を使用してください。 1回の反復でソートされた要素を取得できます。これは、最初の並べ替えとフィルタリングより効率的です。これはあなたに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);

関連する問題