2016-04-14 57 views
-2

我收到Ajax響應JSON如下如何改變JSON格式

var optgroups = [{"LAST_X_HRS":1,"AREA":"WKS-FINGER1","EQ_ID":"WKS1"}, 
{"LAST_X_HRS":1,"AREA":"WKS-FINGER1","EQ_ID":"WKS2"}, 
{"LAST_X_HRS":1,"AREA":"WKS-FINGER2","EQ_ID":"WKS3"}, 
{"LAST_X_HRS":1,"AREA":"WKS-FINGER2","EQ_ID":"WKS4"}] 

如何改變成以下格式

var optgroups = [ 
          { 
           label: 'WKS-FINGER1', children: [ 
            {label: 'WKS1', value: 'WKS1',}, 
            {label: 'WKS2', value: 'WKS2',} 

           ] 
          }, 
          { 
           label: 'WKS-FINGER2', children: [ 
            {label: 'WKS3', value: 'WKS3',}, 
            {label: 'WKS4', value: 'WK4',} 
           ] 
          } 
         ]; 
+2

看起來像一個循環是必要的。 – epascarello

回答

3

這個你可以使用一個Array#forEach(),並建立一個新的數組。

該方法利用thisArgs作爲引用項目的臨時對象。

var optgroups = [{ "LAST_X_HRS": 1, "AREA": "WKS-FINGER1", "EQ_ID": "WKS1" }, { "LAST_X_HRS": 1, "AREA": "WKS-FINGER1", "EQ_ID": "WKS2" }, { "LAST_X_HRS": 1, "AREA": "WKS-FINGER2", "EQ_ID": "WKS3" }, { "LAST_X_HRS": 1, "AREA": "WKS-FINGER2", "EQ_ID": "WKS4" }], 
 
    temp = []; 
 

 
optgroups.forEach(function (a) { 
 
    if (!this[a.AREA]) { 
 
     this[a.AREA] = { label: a.AREA, children: [] }; 
 
     temp.push(this[a.AREA]); 
 
    } 
 
    this[a.AREA].children.push({ label: a.EQ_ID, value: a.EQ_ID }); 
 
}, Object.create(null)); 
 

 
document.write('<pre> ' + JSON.stringify(temp, 0, 4) + '</pre>');

+1

不錯!比我準備做的更簡單。 –

+1

謝謝你的工作就像一個魅力 –

0

我的做法被證明是非常相似的@Nina肖爾茨當談到陣列減少Array.prototype.reduce()只是更有意義,我確實不過。

var optGroups = [{"LAST_X_HRS":1,"AREA":"WKS-FINGER1","EQ_ID":"WKS1"},{"LAST_X_HRS":1,"AREA":"WKS-FINGER1","EQ_ID":"WKS2"},{"LAST_X_HRS":1,"AREA":"WKS-FINGER2","EQ_ID":"WKS3"},{"LAST_X_HRS":1,"AREA":"WKS-FINGER2","EQ_ID":"WKS4"}], 
 
reduced = optGroups.reduce((p,c) => { var i = p.length-1; 
 
     \t        if (!!p[i] && p[i].label == c.AREA) { 
 
     \t         p[i].children.push({label: c.EQ_ID, value: c.EQ_ID}); 
 
     \t        } else { 
 
     \t         p.push({label: c.AREA, children: []}); 
 
     \t         p[++i].children.push({label: c.EQ_ID, value: c.EQ_ID}); 
 
     \t         } 
 
             return p; }, []); 
 

 
document.write('<pre> ' + JSON.stringify(reduced, 0, 2) + '</pre>');