簡體   English   中英

angularjs,需要轉換對象屬性

[英]angularjs, need to transform object properties

在我的angularjs應用程序中,我有一個模型,它是對象數組,如下所示:

 $scope.originalData = [{

     "id": 10000,
     "transactionid": "gec43434",
     "status": "COMPLETED",
     "session_id": "TTYUU455667",
     "errors": "1",
     "start_timestamp": "2016-11-07 02:35:35",
     "log_field": "Sample Text For Testing"

 }, {

     "id": 10001,
     "transactionid": "r34fdfdf",
     "status": "COMPLETED",
     "session_id": "dfdfer3453df",
     "errors": "3",
     "start_timestamp": "2016-10-07 03:20:15",
     "log_field": "Sample Text2 For Testing"

 }];

現在,我需要修改對象的相同數組以顯示如下所示,除了log_field其余所有屬性都應歸入同一對象的另一個屬性之下。

$scope.modifiedData = [{
     "subItems": {
         "id": 1000,
         "transactionid": "gec43434",
         "status": "COMPLETED",
         "session_id": "TTYUU455667",
         "errors": "1",
         "start_timestamp": "2016-11-07 02:35:35"
     },
     "log_field": "Sample Text For Testing"

 }, {
     "subItems": {
         "id": 10001,
         "transactionid": "r34fdfdf",
         "status": "COMPLETED",
         "session_id": "dfdfer3453df",
         "errors": "3",
         "start_timestamp": "2016-10-07 03:20:15"
     },
     "log_field": "Sample Text2 For Testing"

 }]

這是您可以做的。 使用Array.map並刪除。

 var originalData = [{ "id": 10000, "transactionid": "gec43434", "status": "COMPLETED", "session_id": "TTYUU455667", "errors": "1", "start_timestamp": "2016-11-07 02:35:35", "log_field": "Sample Text For Testing" }, { "id": 10001, "transactionid": "r34fdfdf", "status": "COMPLETED", "session_id": "dfdfer3453df", "errors": "3", "start_timestamp": "2016-10-07 03:20:15", "log_field": "Sample Text2 For Testing" }]; var result = originalData.map((item) => { var log_field = item.log_field; delete item.log_field; return { "subItems": item, "log_field": log_field }; }); console.log(result); 

萬一,如果您不應該修改原始數據,這是您可以做的。

 var originalData = [{ "id": 10000, "transactionid": "gec43434", "status": "COMPLETED", "session_id": "TTYUU455667", "errors": "1", "start_timestamp": "2016-11-07 02:35:35", "log_field": "Sample Text For Testing" }, { "id": 10001, "transactionid": "r34fdfdf", "status": "COMPLETED", "session_id": "dfdfer3453df", "errors": "3", "start_timestamp": "2016-10-07 03:20:15", "log_field": "Sample Text2 For Testing" }]; var result = originalData.map((item) => { //Withou modifying original data. var resultItem = Object.assign({}, item), log_field = resultItem.log_field; delete resultItem.log_field; return { "subItems": resultItem, "log_field": log_field }; }); console.log(originalData); console.log(result); 

似乎很簡單

 const originalData = [{"id":10000,"transactionid":"gec43434","status":"COMPLETED","session_id":"TTYUU455667","errors":"1","start_timestamp":"2016-11-07 02:35:35","log_field":"Sample Text For Testing"},{"id":10001,"transactionid":"r34fdfdf","status":"COMPLETED","session_id":"dfdfer3453df","errors":"3","start_timestamp":"2016-10-07 03:20:15","log_field":"Sample Text2 For Testing"}] const doNotMap = 'log_field' const modifiedData = originalData.map(d => { let subKeys = Object.keys(d).filter(key => key !== doNotMap) return { subItems: subKeys.reduce((obj, key) => { return Object.assign(obj, { [key]: d[key] }) }, Object.create(null)), [doNotMap]: d[doNotMap] } }) console.info('Modified =', modifiedData) console.log('Original =', originalData) 


所以這是ES2015之前的版本

 var originalData = [{"id":10000,"transactionid":"gec43434","status":"COMPLETED","session_id":"TTYUU455667","errors":"1","start_timestamp":"2016-11-07 02:35:35","log_field":"Sample Text For Testing"},{"id":10001,"transactionid":"r34fdfdf","status":"COMPLETED","session_id":"dfdfer3453df","errors":"3","start_timestamp":"2016-10-07 03:20:15","log_field":"Sample Text2 For Testing"}] var doNotMap = 'log_field' var modifiedData = originalData.map(function(d) { var subKeys = Object.keys(d).filter(function(key) { return key !== doNotMap }) var modified = Object.create(null) modified.subItems = subKeys.reduce(function(obj, key) { var keyObj = Object.create(null) keyObj[key] = d[key] return Object.assign(obj, keyObj) }, Object.create(null)) modified[doNotMap] = d[doNotMap] return modified }) console.info('Modified =', modifiedData) console.log('Original =', originalData) 

這是我的方法,它將添加所有字段,無論您的數據結構如何。 如果您的領域需要更改,這是“稍微”未來的證明。 除了log_field之外,所有字段都將添加到subItems log_field

var data = [
  {
    "id": 10000,
    "transactionid": "gec43434",
    "status": "COMPLETED",
    "session_id": "TTYUU455667",
    "errors": "1",
    "start_timestamp": "2016-11-07 02:35:35",
    "log_field": "Sample Text For Testing"
  },
  {
    "id": 10001,
    "transactionid": "r34fdfdf",
    "status": "COMPLETED",
    "session_id": "dfdfer3453df",
    "errors": "3",
    "start_timestamp": "2016-10-07 03:20:15",
    "log_field": "Sample Text2 For Testing"
  }
];

var newData = [];

data.forEach(function(object) {

  // Create a new temporary object
  var temp = {
    subItems: {}
  };

  // Loop through the existing object
  for (var key in object) {

    // Leave the log field out of sub items
    if (key === "log_field") temp[key] = object[key];

    // Add all other keys/values to the subItems object
    temp["subItems"][key] = object[key];
  }

  // Push the new object to the newData array
  newData.push(temp);
});

console.log(newData);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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