2017-01-26 12 views
-1

私は、指定されたidパラメータからユーザオブジェクトを返す必要のあるメソッドを持っています。さらなる方法はこの構造を使用するので、既存の構造を使用する単純なケースではありません。Javascriptオブジェクトを作成し、配列値でキーを付けます

私はtypeというキーを含むデータベースを持っています。これはフィルタリングされており、コレクションはusersです。私がする必要があるのは、ユーザ_idの値をキーとし、_idtypeを省略したusersオブジェクトが含まれているオブジェクトを作成することです。

ロダッシュやES6の砂糖を使って、私は次のように変換したいと思います。;省略_idtypeと、次のObjectの中へ

[ 
    { 
    "_id": "0e12e661cb50068a135b36067f001d20", 
    "name": "Joe Bloggs", 
    "type": "user" 
    }, 
    { 
    "_id": "0e12e661cb50068a135b36067f00373f", 
    "name": "Ben Bloggs", 
    "type": "user" 
    } 
] 

、。

{ 
    "0e12e661cb50068a135b36067f001d20": { 
    "name": "Joe Bloggs" 
    }, 
    "0e12e661cb50068a135b36067f00373f": { 
    "name": "Ben Bloggs" 
    } 
} 

EDIT私は、さらにプロパティは、これらのオブジェクトに追加することができように、オブジェクトとNOT名前を返す必要があります。

答えて

5

reduce()でこれを行うことができます。

var data = [{ 
 
    "_id": "0e12e661cb50068a135b36067f001d20", 
 
    "name": "Joe Bloggs", 
 
    "type": "user" 
 
}, { 
 
    "_id": "0e12e661cb50068a135b36067f00373f", 
 
    "name": "Ben Bloggs", 
 
    "type": "user" 
 
}] 
 

 
var result = data.reduce(function(r, e) { 
 
    r[e._id] = {name: e.name}; 
 
    return r; 
 
}, {}) 
 

 
console.log(result)

ES6矢印機能付きバージョン

var result = data.reduce((r, e) => (r[e._id] = {name: e.name}, r), {}) 

更新:ちょうどあなたが削除するオブジェクトのコピーを作成するために、Object.assign()DEMOを使用して、deleteできる新しいオブジェクトから特定のプロパティを除外するために、いくつかのプロパティまたはforEach()ループを使用して、必要なプロパティを追加することができますDEMO

+0

答えていただきありがとうございます。私の** EDIT **をご覧ください。 nameプロパティだけでなく、 '_id'および' type'プロパティを省略したオブジェクトが必要です。ある段階では、ユーザオブジェクトに追加のプロパティが追加され、これを破ることになります。 – MindVox

+0

そのような場合は、https://jsfiddle.net/Lg0wyt9u/1462/またはhttps://jsfiddle.net/Lg0wyt9u/1464/ –

+0

のようなものを使用することができます。これは素晴らしいものです。そのうちの1つを入れてください。喜んで受け入れる。ありがとうございます:-) – MindVox

関連する問題