簡體   English   中英

創建新的JavaScript數組,從對象屬性中提取數據

[英]Create new javascript array extracting data from object properties

我需要將其中相似數據保存在單獨屬性中的平面數組轉換為將每個屬性的數據字段組合在一起的數組數組。 希望有一個例子可以解決這個問題。

原始數組:

        [{"MtmDate":"2014-10-24", "MouldingID":"1233B", "ID":38, "Mtm01":5.10, "Mtm02":6.63,"Mtm03":5.84 },
         {"MtmDate":"2014-10-25", "MouldingID":"1233B", "ID":39, "Mtm01":5.13, "Mtm02":6.21,"Mtm03":6.64 },
         {"MtmDate":"2014-10-26", "MouldingID":"1233B", "ID":40, "Mtm01":5.68, "Mtm02":5.95,"Mtm03":6.37 },
...
]

需要的輸出:

    [{"Mtm": 1, values: [{"MtmDate": "2014-10-24", "ID":38, data: 5.10},
                       {"MtmDate": "2014-10-25", "ID":39, data: 5.13},
                       {"MtmDate": "2014-10-26", "ID":40, data: 5.68}]},
     {"Mtm": 2, values: [{"MtmDate": "2014-10-24", "ID":38, data: 6.63},
                       {"MtmDate": "2014-10-25", "ID":39, data: 6.21},
                       {"MtmDate": "2014-10-26", "ID":40, data: 5.95}]},
     {"Mtm": 3, values: [{"MtmDate": "2014-10-24", "ID":38, data: 5.84},
                       {"MtmDate": "2014-10-25", "ID":39, data: 6.64},
                       {"MtmDate": "2014-10-26", "ID":40, data: 6.37}]},
     ]

我知道我可以通過“手動”為每個數據字段設置對象並將它們添加到新數組中來做到這一點:

    var mtm1 = { mtm: 1, values: [] }, mtm2 = { mtm: 2, values: [] }, mtm3 = { mtm: 3, values: [] };
    var dataByPoint = [];
    dataByPoint.push(mtm1);
    dataByPoint.push(mtm2);
    dataByPoint.push(mtm3);

然后遍歷原始數組,獲取每個對象的數據:

$.each(d, function(index, value) {
    var details1 = { mtmDate: value.MtmDate, id: value.ID, data: value.Mtm01 };
    if (details1.data) dataByPoint[0].values.push(details1);

    var details2 = { mtmDate: value.MtmDate, id: value.ID, data: value.Mtm02 };
    if (details2.data) dataByPoint[1].values.push(details2);

    var details3 = { mtmDate: value.MtmDate, id: value.ID, data: value.Mtm03 };
    if (details3.data) dataByPoint[2].values.push(details3); 
});

但是,實際上有許多這些數據屬性,並且此方法似乎是漫長的。 有沒有一種方法可以通過遍歷數據屬性來填充新數組?

使用數組的映射功能。

var originalArray =   [{"MtmDate":"2014-10-24", "MouldingID":"1233B", "ID":38, "Mtm01":5.10, "Mtm02":6.63,"Mtm03":5.84 },
         {"MtmDate":"2014-10-25", "MouldingID":"1233B", "ID":39, "Mtm01":5.13, "Mtm02":6.21,"Mtm03":6.64 },
         {"MtmDate":"2014-10-26", "MouldingID":"1233B", "ID":40, "Mtm01":5.68, "Mtm02":5.95,"Mtm03":6.37 },
...
]

var expectedArray = originalArray.map(function(v){
   return {mtm:v.ID, values:v}
})

 var arr =[{"MtmDate":"2014-10-24", "MouldingID":"1233B", "ID":38, "Mtm01":5.10, "Mtm02":6.63,"Mtm03":5.84 }, {"MtmDate":"2014-10-25", "MouldingID":"1233B", "ID":39, "Mtm01":5.13, "Mtm02":6.21,"Mtm03":6.64 }, {"MtmDate":"2014-10-26", "MouldingID":"1233B", "ID":40, "Mtm01":5.68, "Mtm02":5.95,"Mtm03":6.37 } ] var newArr = []; for (var i = 0; i < arr.length; i++) { var obj = {}; obj.Mtm = (i+1); obj.values = []; if (Object.keys(arr[i])[i+3]) //test if the `Mtm##` is present. { for (var c = 0; c < arr.length; c++) { var keys = Object.keys(arr[c]); obj.values.push({"MtmDate" : arr[c].MtmDate, "ID" : arr[c].ID, "data" : arr[c][keys[i+3]]}); } } newArr.push(obj); } document.write(JSON.stringify(newArr)) 

這應該做。 它使用兩個循環來解析數據。

外循環在新數組中創建各個條目,而內循環解析原始元素中的所有條目,並以正確的方式拆分內容。 Object.keys用於根據循環索引選擇正確的數據元素。

暫無
暫無

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

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