2016-07-29 117 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