2017-08-21 4 views

答えて

6

それは+ Array.mapObject.keysを使用して、かなり些細ですが、あなたが本当にlodash必要はありません。sort機能の欠如について

const obj = {2:'b',3:'c',1:'a'}; 
 
const arr = Object.keys(obj).map(key => ({ [key]: obj[key] })) 
 

 
console.log(arr)

を、上記のコードは、その数値的事実を悪用しています索引付けされたオブジェクト・キーは、(仕様に従って)順次格納されます。自分の注文を確認してください:ここで

console.log({2:'b',3:'c',1:'a'})

the spec

9.1.12 [[OwnPropertyKeys]]()

[[の関連部分でありますOwnPropertyKeys]] Oの内部メソッドは と呼ばれ、以下のステップが実行されます。

  1. キーを新しい空リストにします。数値 インデックス順

    2Aを昇順に、整数インデックスであるOの各自身 プロパティキーPについて

  2. 。キーの最後の要素としてPを追加します。

+0

私はhttps://stackoverflow.com/questions/29623333/sort-keys-in-javascript-(オブジェクトキーがソートされると仮定されていません知っていますオブジェクト)、しかし私はObject.keysが通常ソートされているか分からなかった。これについての詳しい情報はどこにありますか? – kevguy

+0

スペックと関連する部分@ kevlai22へのリンクで私の答えを更新しました。これは数値指標にのみ関連することに注意してください –

+0

ありがとうございます! @RobM。 – kevguy

0

なぜロダッシュを使用するのですか?ちょうど通常のJavascriptを使用してください。解決策はちょっとはっきりさせることができますが、あなたのオブジェクトをループし、新しいフォーマットにあなたの望むフォーマットをプッシュすることです。私はまた、便宜のためにそこに並べ替えを投げますが、あなたの好みに再要因を自由に感じてください。

const obj = {2:'b',3:'c',1:'a'} 

let newArr = []; 
for (var key in obj) { 
    newArr.push({[key]: obj[key]}) 
    newArr.sort((a, b) => a[key] > b[key]) 
} 
console.log(newArr) 
1

Lodashは本当にあなたが望むものを達成するために必要はありませんが、私はまだ、とにかくそれを追加し、ソート機能を追加しています。また、ネイティブJavaScriptの方法も含めました。 Object.entriesと今後のJavaScriptで

const obj = {b: 3, c: 2, a: 1}; 
 

 

 
const sortByKeys = object => { 
 
    const keys = Object.keys(object) 
 
    const sortedKeys = _.sortBy(keys) 
 

 
    return _.map(sortedKeys, key => ({ [key]: object[key]})) 
 
} 
 

 
// the lodash way, and sorted 
 
console.log(sortByKeys(obj)) 
 

 
// simpler way 
 
const result = Object.keys(obj) 
 
    .map(key => ({ [key]: obj[key] })) 
 
    
 
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

2

、あなたは、単一のオブジェクトを持つ新しい配列をマッピングすることができます。

var data = {2:'b',3:'c',1:'a'}, 
 
    result = Object 
 
     .entries(data) 
 
     .sort((a, b) => a[0] - b[0]) 
 
     .map(([k, v]) => ({ [k]: v })); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

lodashで、あなたは

var data = {2:'b',3:'c',1:'a'}, 
 
    result = _ 
 
     .chain(data) 
 
     .toPairs(data) 
 
     .sortBy([0]) 
 
     .map(o => _.fromPairs([o])); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

関連する問題