2017-01-26 91 views
-1

我有一個方法需要從提供的id參數中返回用戶對象。更多的方法將使用這種結構,因此使用現有結構不是一個簡單的例子。Javascript創建一個對象,按數組值鍵入

本質上,我有一個數據庫,其中包含一個type鍵,這是篩選,以便我有一個集合users。我需要做的是創建一個對象,該對象由用戶鍵入_id值幷包含用戶對象,其中省略了_idtype

使用lodash或一些ES6糖我想改造以下Array;

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

成以下Object,與_idtype省略;

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

編輯我需要返回的對象,而不是名稱爲進一步特性可以被添加到這些對象。

回答

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

感謝您的回答,請參閱我的**編輯**的問題。我需要'_id'和'type'屬性被忽略的對象,而不僅僅是name屬性。在某個階段,用戶對象可能會添加其他屬性,這會破壞這一點。 – MindVox

+0

在這種情況下,你可以使用像這樣的https://jsfiddle.net/Lg0wyt9u/1462/或這個https://jsfiddle.net/Lg0wyt9u/1464/ –

+0

這是血腥的真棒,請把其中一個,我會欣然接受。謝謝你:-) – MindVox