2017-09-20 8 views
-2

にオブジェクトの配列を変換する方法:どのように私は以下のような配列を持っているマップ

var arr = [ 
    { 
    "id" :"1", 
    "name" : "xyz" 
    }, 
    { 
    "id" :"2", 
    "name" : "abc" 
    }, 
    { 
    "id" :"2", 
    "name" : "cde" 
    } 
] 

私は、次のような形式に変換したい:

{ 
    '2' : ['abc','cde'], 
    '1' : 'xyz' 
} 

はどうすればこれを行うことができますか?これについて角度のあるjsには特別な方法がいくつかありますか?

+0

角度プロジェクトにlodashを追加してみてください、その後、 '_.groupBy(編曲、 'ID')' – georg

+2

は* *フレームワーク*、*ない言語です。あなたはJavaScript *でこれをやっていますが、角度が使われていなくてもやっています。 – Claies

答えて

2

arr全体を反復処理し、オブジェクトごとにIDに基づいて新しいオブジェクトに名前を追加し続けます。

var arr = [ 
 
{ 
 
    "id" :"1", 
 
    "name" : "xyz" 
 
}, 
 
{ 
 
    "id" :"2", 
 
    "name" : "abc" 
 
}, 
 
{ 
 
    "id" :"2", 
 
    "name" : "cde" 
 
} 
 
    ]; 
 

 
var obj ={}; 
 

 
arr.forEach(x => obj.hasOwnProperty(x.id) ? obj[x.id].push(x.name) : obj[x.id] = [x.name]); 
 

 
console.log(obj);

+0

あなたの応答に感謝します。上記のコードを私の角型コントローラで実行すると、私は例外になります。 エラー:[$ rootScope:infdig] 10 $ digest()回に達しました。中止! 最後の5回の繰り返しでウォッチャーが発生しました:[[{"msg": "fn:regularInterceptedExpression"、 "newVal":41、 "oldVal":40}]、[{"msg": "fn:regularInterceptedExpression"、 "newVal "、" oldVal ":41}]、[{" msg ":" fn:regularInterceptedExpression "、" newVal ":43、" oldVal ":42}]、[{" msg ":" fn:regularInterceptedExpression " "newVal":44、 "oldVal":43}]、[{"msg": "fn: – user2603985

0

あなたは、配列を歩くような値をハッシュする、減らす使用してグローバルを避けることができます。

var arr = [{ 
 
    "id": "1", 
 
    "name": "xyz" 
 
    }, 
 
    { 
 
    "id": "2", 
 
    "name": "abc" 
 
    }, 
 
    { 
 
    "id": "2", 
 
    "name": "cde" 
 
    } 
 
]; 
 

 

 

 
let result = arr.reduce((hash, v) => (!hash[v.id] ? hash[v.id] = [v.name] : hash[v.id].push(v.name), hash), ({})) 
 

 

 
console.log(result)

関連する問題