2016-07-29 99 views
-2

我有一個這樣的數組:陣列到對象JSON

[{ 
    mercado: "CAM", 
    region: "CAM Uno", 
    Cliente: "Jonhy" 
}, { 
    mercado: "CAM", 
    region: "CAM Uno", 
    Cliente: "Alex" 
}, { 
    mercado: "CAM", 
    region: "CAM Dos", 
    Cliente: "Jullian" 
}, { 
    mercado: "NAM", 
    region: "OCI", 
    Cliente: "Pascal" 
}, { 
    mercado: "NAM", 
    region: "FLI", 
    Cliente: "Sofia" 
}, { 
    mercado: "NAM", 
    region: "FLI", 
    Cliente: "Priya" 
}]; 

我希望對象像爲:

[{ 
    mercado: "CAM", 
    region: [{ 
     nombre: "CAM Uno", 
     Cliente: ["Jonhy", "Alex"] 
    }, { 
     nombre: "CAM Dos", 
     Cliente: ["Jullian"] 
    }] 
}, { 
    mercado: "NAM", 
    region: [{ 
     nombre: "OCI", 
     Cliente: ["Pascal"] 
    }, { 
     nombre: "FLI", 
     Cliente: ["Sofia", "Priya"] 
    }] 
}]; 

這可能嗎?

+4

我的意思是,在回答你的問題是肯定的。我假設你也在尋找實施幫助? – Aeolingamenfel

+3

「可能嗎?」是。至於實施它,你有什麼嘗試? –

+0

如何創建原始對象?我假設它以某種方式(通過PHP或其他方式)傳遞給你?否則,按照你想要的方式重新組織它。另外,上面的內容不是有效的JSON,因爲它需要在鍵周圍有雙引號。 –

回答

2

您可以使用對象來引用結果集中插入的項目。

var data = [{ mercado: "CAM", region: "CAM Uno", Cliente: "Jonhy" }, { mercado: "CAM", region: "CAM Uno", Cliente: "Alex" }, { mercado: "CAM", region: "CAM Dos", Cliente: "Jullian" }, { mercado: "NAM", region: "OCI", Cliente: "Pascal" }, { mercado: "NAM", region: "FLI", Cliente: "Sofia" }, { mercado: "NAM", region: "FLI", Cliente: "Priya" }], 
 
    grouped = []; 
 

 
data.forEach(function (a) { 
 
    var o = { mercado: a.mercado, region: [] }; 
 
    if (!this[a.mercado]) { 
 
     this[a.mercado] = { region: o.region, }; 
 
     grouped.push(o); 
 
    } 
 
    if (!this[a.mercado][a.region]) { 
 
     this[a.mercado][a.region] = { nombre: a.region, Cliente: [] }; 
 
     this[a.mercado].region.push(this[a.mercado][a.region]); 
 
    } 
 
    this[a.mercado][a.region].Cliente.push(a.Cliente); 
 
}, Object.create(null)); 
 
    
 
console.log(grouped);

+0

再次發佈比我更好的答案。 – DontVoteMeDown