簡體   English   中英

JavaScript 中操作數組和對象的數據

[英]Data of Manipulating Arrays and Objects in JavaScript

我希望通過對值進行一些轉置來對對象/數組進行一些數據操作。 其中行的值成為列。 例如,我有看起來像這樣的原始數據

 [ { "Team": "D PG", "Original_x0020_Size_x0020__x0028": 194, "Month": "January" }, { "Team": "D PP", "Original_x0020_Size_x0020__x0028": 143, "Month": "January" }, { "Team": "D RE", "Original_x0020_Size_x0020__x0028": 19, "Month": "January" }, { "Team": "D GP", "Original_x0020_Size_x0020__x0028": 3, "Month": "January" }, { "Team": "D PC", "Original_x0020_Size_x0020__x0028": 2, "Month": "January" }, { "Team": "D PT", "Original_x0020_Size_x0020__x0028": 2, "Month": "January" }, { "Team": "D PG", "Original_x0020_Size_x0020__x0028": 35, "Month": "February" }, { "Team": "D PP", "Original_x0020_Size_x0020__x0028": 120, "Month": "February" }, { "Team": "D RE", "Original_x0020_Size_x0020__x0028": 40, "Month": "February" }, { "Team": "D GP", "Original_x0020_Size_x0020__x0028": 30, "Month": "February" }, { "Team": "D PC", "Original_x0020_Size_x0020__x0028": 9, "Month": "February" }, { "Team": "D PT", "Original_x0020_Size_x0020__x0028": 6, "Month": "February" } ]

我打算將其更改為

 //i'm looking at changing the original data to look like this. The Team will have a position on the array, for example array[0][1](this column will be taken by all values that belong to team 'D PG') and array[0][2](will be taken by all values that belong to the team 'D PP') // you will notice that all the other values for other months are at zero, thats because i want the initial values to be zero untill data has been put in for them [ [ "January", 194, 143, 19, 3, 2, 2 ], [ "February", 35, 120, 40, 30, 9, 6 ], [ "March", 0, 0, 0, 0, 0, 0 ], [ "April", 0, 0, 0, 0, 0, 0 ], [ "May", 0, 0, 0, 0, 0, 0 ], [ "June", 0, 0, 0, 0, 0, 0 ], [ "July", 0, 0, 0, 0, 0, 0 ], [ "August", 0, 0, 0, 0, 0, 0 ], [ "September", 0, 0, 0, 0, 0, 0 ], [ "October", 0, 0, 0, 0, 0, 0 ], [ "November", 0, 0, 0, 0, 0, 0 ], [ "December", 0, 0, 0, 0, 0, 0 ] ]

我使用 for 循環來迭代原始數據對象,然后使用 if 語句將它們按月份和團隊分組。 但是代碼會變得非常龐大,我認為效率低下。 關於更好的方法的任何想法

 var grouped = eval('[["January",0,0,0,0,0,0],["February",0,0,0,0,0,0],["March"0,0,0,0,0,0],["April",0,0,0,0,0,0],["May",0,0,0,0,0,0],["June"0,0,0,0,0,0],["July",0,0,0,0,0,0],["August",0,0,0,0,0,0],["September",0,0,0,0,0,0],["October",0,0,0,0,0,0],["November",0,0,0,0,0,0],["December",0,0,0,0,0,0]]'); for (i=0; i< dataResult.length; i++) { if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D PG')){ var original = dataResult[i]['Original_x0020_Size_x0020__x0028']; grouped[0][1] =original; } if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D PP')){ var original = dataResult[i]['Original_x0020_Size_x0020__x0028']; grouped[0][2] =original; } if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D RE')){ var original = dataResult[i]['Original_x0020_Size_x0020__x0028']; grouped[0][3] =original; } if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D GP')){ var original = dataResult[i]['Original_x0020_Size_x0020__x0028']; grouped[0][4] =original; } if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D PC')){ var original = dataResult[i]['Original_x0020_Size_x0020__x0028']; grouped[0][5] =original; } if((dataResult[i]['Month'] == 'January') && (dataResult[i]['Team'] == 'D PT')){ var original = dataResult[i]['Original_x0020_Size_x0020__x0028']; grouped[0][6] =original; }

與往常一樣,只需使用哈希表來簡化事情:

const result = [], month = {};

// I did not want to put that identifier everywhere... :/
const wtf = "Original_x0020_Size_x0020__x0028";

for(const entry of data){
  if(month[entry.Month]){
     month[entry.Month].push(entry[wtf]);
  } else {
     result.push(month[entry.Month] = [entry.Month, entry[wtf]]);
  }
}

暫無
暫無

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

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