js对象数组(JSON) 根据某个共同字段 分组

希望的是将下面的对象数组:

[
    {"id":"1001","name":"值1","value":"111"},
    {"id":"1001","name":"值1","value":"11111"},
    {"id":"1002","name":"值2","value":"25462"},
    {"id":"1002","name":"值2","value":"23131"},
    {"id":"1002","name":"值2","value":"2315432"},
    {"id":"1003","name":"值3","value":"333333"}
]

根据相同id字段分组,转换成下面这种形式:

[
    {
        "id": "1001",
        "name": "值1",
        "data": [
            {"id": "1001", "name": "值1", "value": "111"},
            { "id": "1001", "name": "值1", "value": "11111"}
        ]
    },
    {
        "id": "1002",
        "name": "值2",
        "data": [
            { "id": "1002",  "name": "值2", "value": "25462" },
            { "id": "1002", "name": "值2", "value": "23131"},
            {"id": "1002", "name": "值2","value": "2315432" }
        ]
    },
    {
        "id": "1003",
        "name": "值3",
        "data": [
            {"id": "1003", "name": "值3", "value": "333333" }
        ]
    }
]

做法:

var arr = [
    {"id":"1001","name":"值1","value":"111"},
    {"id":"1001","name":"值1","value":"11111"},
    {"id":"1002","name":"值2","value":"25462"},
    {"id":"1002","name":"值2","value":"23131"},
    {"id":"1002","name":"值2","value":"2315432"},
    {"id":"1003","name":"值3","value":"333333"}
];

var map = {},
    dest = [];
for(var i = 0; i < arr.length; i++){
    var ai = arr[i];
    if(!map[ai.id]){
        dest.push({
            id: ai.id,
            name: ai.name,
            data: [ai]
        });
        map[ai.id] = ai;
    }else{
        for(var j = 0; j < dest.length; j++){
            var dj = dest[j];
            if(dj.id == ai.id){
                dj.data.push(ai);
                break;
            }
        }
    }
}

console.log(dest);

原文地址:https://www.cnblogs.com/shizhijie/p/8386013.html

时间: 2024-10-07 06:41:30

js对象数组(JSON) 根据某个共同字段 分组的相关文章

JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换

首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是js中JSON格式的字符串,它只是一个js的字符串. var JSONStr2 = "{'name' : '张三'}"; 我们看JSON语法中对于字符串的定义:是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义.一个字符(character)即一个单独的字符串(characte

JS 对象数组Array 根据对象object key的值排序sort,很风骚哦

有个js对象数组 var ary=[{id:1,name:"b"},{id:2,name:"b"}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数 函数定义: function keysrt(key,desc) {   return function(a,b){     return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);   } } 使用: var ary=[{id:1,nam

js对象数组按属性快速排序

前一篇<关于selector性能比赛>中提到,目测觉得在$("div,p,a")这样有逗号时,sizzle耗时异常(600多个元素,花了200ms),说是它可能没有优化ie下的排序.按所推荐的程序在IE下跑了下,的确,排序耗时很小. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 /* * 快速排序,按某个属性,或按“获取排序

【JS对象、JSON字符串】之间的相互转换

在Firefox,chrome,opera,safari,ie9,ie8等浏览器直接可以用JSON对象的stringify()和parse()方法. 1.JSON.stringify(obj)将JS对象转为JSON字符串. //JS对象 var obj={"name":"tom","sex":"男","age":"24"}; //JS对象转化为JSON字符串 var jsonString

JS对象与json字符串格式

1 <head> 2 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 3 <title></title> 4 <script type="text/javascript"> 5 var obj = new Object(); 6 obj.Name = "八戒" 7 obj.Ag

js对象和json的区别

他们两个没有什么关联只不过可以相互转换而已,就像json可以转化为java对象一样 注意:json只有字符串形式(就是我们常说的json字符串:key/value值和数组形式的字符串),没有什么json对象(当json字符串转换为java对象是就是java对象,当json字符串被转换为js对象时,就是js对象). json字符串的格式和js的格式很相似而已. json可以说与XML文件是如出一辙的,只不过要比XML文件轻便. 以上为自己总结,如有不对请指教,谢谢

JSON转JS对象,JS对象转JSON

一.从服务端发来的json字符串,怎么才能作为JavaScript对象(JSON对象)在web端调用呢? 1.如果使用jQuery,就很方便了,可以在ajax一系列函数中,把参数Datatype传json即可,返回的data即为JSON对象. PS:如果要对表单处理为json字符串,可以使用.serialize()与.serializeArray()处理,如果要作为URL调用,则可以使用jQuery.param()处理. 2.$.parseJSON( jsonstr) 3.浏览器自带的JSON.

node.js JS对象和JSON字符串之间的转换

JSON.stringify(obj)将JS对象转为字符串. var json = { aa: ['sdddssd'],   bb: [ '892394829342394792399', '23894723984729374932874' ],   cc: ['11111111111111'] } => var string = JSON.stringify(json) string: {"aa":["sdddssd"],"bb":[&qu

javascript学习之js对象和json对象(obj=JSON.parse(stu))

js对象是键值对的容器, 一定要了解逗号和分号在js里面的用途 如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量./w3cschool/i 是一个正则表达式.w3cschool 是一个模式 (用于检索).i 是一个修饰符 (搜索不区分大小写).使用正则表达式搜索 "w3cschool" 字符串,且不区分大小写:var str = "Visit w3cschool";var n = str.search(/w3cschool/i); 获取指定id