前提
JavaScriptで、連装配列オブジェクトの配列に対し、指定キーでソ―トしたいです。
実現したいこと
具体例として、以下obj
を渡し、obj["tags"]
の配列を、【指定キー】でソートして【目的の値】を得たいのです。
発生している問題
自分なりの関数sort_tags
を作ったのですが、sort_keys
でのソートが実現できません。
対象となるオブジェクト
JavaScript
1const obj = { 2 "id": "1", 3 "tags": [ 4 { 5 "kind": "genre", 6 "name": "ジャンルA", 7 }, 8 { 9 "kind": "book", 10 "name": "本A", 11 }, 12 { 13 "kind": "genre", 14 "name": "ジャンルB", 15 }, 16 { 17 "kind": "user", 18 "name": "ユーザーA", 19 } 20 ] 21};
実現したいこと(例1)
【指定キー】
JavaScript
1const sort_keys = [ "user", "book", "genre" ];
【目的の値】
JavaScript
1{ 2 "id": "1", 3 "tags": [ 4 { 5 "kind": "user", 6 "name": "ユーザーA", 7 }, 8 { 9 "kind": "book", 10 "name": "本A", 11 }, 12 { 13 "kind": "genre", 14 "name": "ジャンルA", 15 }, 16 { 17 "kind": "genre", 18 "name": "ジャンルB", 19 } 20 ] 21};
実現したいこと(例2)
【指定キー】
JavaScript
1const sort_keys = [ "book", "genre", "user" ];
【目的の値】
JavaScript
1{ 2 "id": "1", 3 "tags": [ 4 { 5 "kind": "book", 6 "name": "本A", 7 }, 8 { 9 "kind": "genre", 10 "name": "ジャンルA", 11 }, 12 { 13 "kind": "genre", 14 "name": "ジャンルB", 15 }, 16 { 17 "kind": "user", 18 "name": "ユーザーA", 19 }, 20 ] 21};
試したこと
次の関数sort_tags
を作ったのですが、順序を変えることができませんでした。
JavaScript
1console.log( sort_tags( obj ) ); 2 3function sort_tags( obj ) { 4 5 const sort_keys = [ "user", "book", "genre" ]; 6 7 let result = {}; 8 9 Object.keys(obj).forEach( key => { 10 11 if ( key === 'tags' ) { 12 13 result.tags = []; 14 15 obj.tags.forEach( tag_info => { 16 17 sort_keys.forEach( sort_key => { 18 19 if ( sort_key === tag_info.kind ) { 20 result.tags.push({ 21 kind: sort_key, 22 name: tag_info.name 23 }); 24 } 25 26 }); 27 28 }); 29 30 } else { 31 result[key] = obj[key]; 32 } 33 34 }); 35 36 return result; 37 38}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/15 23:48