我有一个下面提到的数组,包含大约 5000 个值。 x1、x2、x3 的值是随机的,可能有相似性,也可能没有相似性。我想将数组中给出的数据组合到一个 JSON 对象中,首先根据 Group 进行分组,然后根据 Block 进行分组。可以肯定的是,Village 的值(value)观将永远是独一无二的。 鉴于:
Array= [
{Group:"A", Block:"Kansas", Village:"Little",x1:12,x2:214,x3:12},
{Group:"A", Block:"Kansas", Village:"Whinging",x1:12,x2:214,x3:12},
{Group:"A", Block:"Angeles", Village:"Surrey",x1:12,x2:214,x3:12},
{Group:"B", Block:"York", Village:"Privet",x1:12,x2:214,x3:12},
{Group:"B", Block:"Columbia", Village:"Drive",x1:12,x2:214,x3:12},
{Group:"B", Block:"Yorkshire", Village:"Number",x1:12,x2:214,x3:12}
]
想要:
Obj={
"A": {
"Kansas":[
{Village:"Little",x1:12,x2:214,x3:12},
{Village:"Whinging",x1:12,x2:214,x3:12}
],
"Angeles":[
{Village:"Surrey",x1:12,x2:214,x3:12}
]
},
"B": {
"York":[
{Village:"Privet",x1:12,x2:214,x3:12}
],
"Columbia":[
{Village:"Drive",x1:12,x2:214,x3:12}
],
"Yorkshire":[
{Village:"Number",x1:12,x2:214,x3:12}
]
}
}
我尝试编写执行此操作的函数,但似乎没有一个能正常工作并为我提供与我期望的输出相同的输出,因为值 x1、x2 和 x3 不相似。此外,不一定只有 3 个值。也可能有 10 或 15 个。
请问有人可以帮我吗?
最佳答案
我认为这里没有必要使用 jQuery... 另外,SinnerShanky 说他不知道是否总是存在三个值 (x1...xn),所以这行不通。
这是另一个解决方案:
var obj = {}
arr.forEach(function(v){
var group = v.Group,
block = v.Block,
villageObj = {};
if (!obj.hasOwnProperty(group)){
obj[group] = {};
}
if(!obj[group].hasOwnProperty(block)){
obj[group][block] = [];
}
villageObj = v; // You should properly clone the object if you don't want to modify your initial object
delete(villageObj.Group);
delete(villageObj.Block);
obj[group][block].push(villageObj);
});
但是,请记住,我使用删除来删除组和 block ,因此这些属性将也从您的初始数组中删除。
关于javascript - 从不同的键创建多层对象:value pairs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23883531/