javascript - 从不同的键创建多层对象:value pairs

标签 javascript jquery json

我有一个下面提到的数组,包含大约 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 ,因此这些属性将从您的初始数组中删除。

jsfiddle

关于javascript - 从不同的键创建多层对象:value pairs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23883531/

相关文章:

c# - 使用 JsonConvert 从 .Net 中的 JSON 中删除/替换换行符

json - 去图表动态数据

php - 在 MySQL php 中获取最小 ID 和最大 ID 值

javascript - 计算动态生成的 div 中特定类的跨度数

javascript - 在 Express.js 中添加子站点时 CSS 无法正确发送

javascript - Angular Material md-select ng-model 设置为未定义的规则

javascript - 如何在 jquery 上只选择父级?

javascript - 页面加载时默认隐藏所有div,显示:none doesn't appear to work

Javascript 压缩和对象属性问题

jquery 查找具有匹配属性值的元素