将数组里某个属性相同的对象合并成一个数组

var array=[
        {id:1,name:'小明',sex:'男'},
        {id:2,name:'小刚',sex:'男'},
        {id:3,name:'小红',sex:'女'},
        {id:4,name:'小花',sex:'女'},
        {id:5,name:'小甜甜',sex:'女'},
    ]
    var obj={},newArr=[];
    array.forEach(function(item,suffix){
        //根据对象的属性是唯一的,将值作为对象的属性名
        if(!obj[item.sex]){
            var arr=[];
            arr.push(item);
            newArr.push(arr);
            obj[item.sex]=item;
        }else{
            newArr.forEach(function(value,index){
                //如果已经存在  就循环新组的值将值插入属性相同的数组里   为了防止重复添加   只要和第一个比较就可以了
                if(value[0].sex==item.sex){
                    value.push(item)
                }
            })
        }
    })
    console.log(obj);
    console.log(newArr)

来源:https://www.cnblogs.com/yuzihong/p/10495511.html

  方法二:

var arr=[{name:2,id:3},{name:2,id:4},{name:3,id:5},{name:3,id:6},{name:1,id:1},{name:1,id:2}];
 
// 传入一个数组
// 按照特定方式格式化
function sortArr(arr, str) {
    var _arr = [],
        _t = [],
        // 临时的变量
        _tmp;
 
    // 按照特定的参数将数组排序将具有相同值得排在一起
    arr = arr.sort(function(a, b) {
        var s = a[str],
            t = b[str];
 
        return s < t ? -1 : 1;
    });
 
    if ( arr.length ){
        _tmp = arr[0][str];
    }
    // console.log( arr );
    // 将相同类别的对象添加到统一个数组
    for (var i in arr) {
        console.log( _tmp);
        if ( arr[i][str] === _tmp ){
            console.log(_tmp)
            _t.push( arr[i] );
        } else {
            _tmp = arr[i][str];
            _arr.push( _t );
            _t = [arr[i]];
        }
    }
    // 将最后的内容推出新数组
    _arr.push( _t );
    return _arr;
}
 
sortArr( arr, 'name');

来源:https://blog.csdn.net/wqnmlgbsz/article/details/118767609

 扩展:

数组对象相同的key值合并,并且把对应的id放到一个数组

https://blog.csdn.net/qq_43765727/article/details/98485490

 

原文地址:https://www.cnblogs.com/sherryweb/p/15246104.html