[英]Convert Javascript object and children into array of objects - lodash
我正在尋找改變一些數據的結構。 以下是我收到的數據樣本
{
ID1: {
firstName: 'John',
lastName: 'Doe'
},
ID2: {
firstName: 'Jane',
lastName: 'Doe'
}
}
我需要做的是將其轉換為以下格式的數組:
[
{ ID: ID1, firstName: 'John', lastName: 'Doe' },
{ ID: ID2, firstName: 'Jane', lastName: 'Doe' }
]
如果可能,我更喜歡使用lodash
使用Object.keys()
和Array#map()
。 Object.keys()
有助於以數組的形式獲取對象的所有屬性。 然后,可以使用Array#map()
迭代元素,並根據返回的元素生成新的數組。
var data = { ID1: { firstName: 'John', lastName: 'Doe' }, ID2: { firstName: 'Jane', lastName: 'Doe' } }; var res = Object.keys(data) // get all object properties as an array .map(function(k) { // iterate and generate new array with custom element return { // generate custom array object based on the property and object and return ID: k, // k is property of ov=bjeck firstName: data[k].firstName, // get inner properties from data object using k larstName: data[k].lastName }; }) console.log(res);
更新:我創建了新對象,而不是更新原始對象並返回了它。 如果更新原始對象不是問題,則向對象添加其他屬性,並在Array#map()
回調函數內返回引用。 如果存在許多內部屬性,則此方法有效,但是會更新原始對象。
var data = { ID1: { firstName: 'John', lastName: 'Doe' }, ID2: { firstName: 'Jane', lastName: 'Doe' } }; var res = Object.keys(data) // get all object properties as an array .map(function(k) { // iterate and generate new array with custom element data[k].ID = k; // add additional property return data[k]; // return the reference }) console.log(res);
或者,如果您要維護對象並且內部對象屬性很多,則可以執行類似操作。
var data = { ID1: { firstName: 'John', lastName: 'Doe' }, ID2: { firstName: 'Jane', lastName: 'Doe' } }; var res = Object.keys(data) // get all object properties as an array .map(function(k) { // iterate and generate new array with custom element var obj = { // create an object to return ID: k }; for (var key in data[k]) // iterate over object property if (data[k].hasOwnProperty(key)) // check the object has the property obj[key] = data[k][key]; // add property to the newly generated object return obj; // return the object }) console.log(res);
您可以向對象添加ID嗎? 如果是這樣,則可以使用以下方法輕松實現:
var arr = _.values(obj);
說明:
開發人員通常會復制密鑰內部值以避免很多問題。 他們確實是這樣的:
{
ID1: {
ID: ID1,
firstName: 'John',
lastName: 'Doe'
},
ID2: {
ID: ID2
firstName: 'Jane',
lastName: 'Doe'
}
}
然后,在上方僅使用一個命令,它僅返回對象的值並創建一個數組。
如果不是適合您的套件,則需要像這樣手動添加ID:
var arr = _.map(obj, function(value, key) {
value[ID] = key;
return value;
});
請注意,代碼將更改原始對象,但在大多數情況下這不是問題,但是如果需要避免這種情況,則需要:
var arr = _(obj)
.clone()
.map(obj, function(value, key) {
value[ID] = key;
return value;
})
.value();
您可以使用map()將對象轉換為數組,然后使用Assign()附加ID
鍵值,這還可以確保原始對象不會發生突變。
這是ES6版本:
var result = _.map(data, (item, ID) => _.assign({ ID }, item));
var data = { ID1: { firstName: 'John', lastName: 'Doe' }, ID2: { firstName: 'Jane', lastName: 'Doe' } }; var result = _.map(data, (item, ID) => _.assign({ ID }, item)); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.js"></script>
這是es5版本:
var result = _.map(data, function(item, ID) {
return _.assign({ ID: ID }, item);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.