簡體   English   中英

將Javascript對象和子對象轉換為對象數組-Lodash

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM