2016-04-14 99 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>');