JS 对象数组 重复id对象 求和去重

本文探讨如何处理包含重复id的JavaScript对象数组,通过累加相同id对象的属性值并去除重复项,实现数据去重和聚合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function testJS() {
    alert("testJS!");
    testFun();
}

function testFun() {
    var array = [];
    var a1 = {"id":1,"num":5};
    var a2 = {"id":2,"num":5};
    var a3 = {"id":3,"num":10};
    var a4 = {"id":4,"num":15};
    var a5 = {"id":2,"num":10};
    var a6 = {"id":2,"num":35};
    var a7 = {"id":4,"num":25};
    var a8 = {"id":1,"num":5};

    array.push(a1);
    array.push(a2);
    array.push(a3);
    array.push(a4);
    array.push(a5);
    array.push(a6);
    array.push(a7);
    array.push(a8);

    console.log("array:"+ array);
    console.log("array json:" + JSON.stringify(array));

    console.log("len of array:" + array.length);

    console.log("如何将重复项的数值加起来,再去除重复项");

    var idArray = [];
    for (var i = 0; i < array.length; i++){
        idArray.push(array[i].id);
    }

    console.log("idArray json:" + JSON.stringify(idArray));

    var chongfuIdArr = [];
    for (var j = 0; j < idArray.length; j++){
        if(isElementChongfuInArray(idArray,idArray[j])){
            if(!isElmInArray(chongfuIdArr,idArray[j])){
                chongfuIdArr.push(idArray[j]);
            }
        }
    }

    console.log("chongfuIdArr:" + chongfuIdArr);

    var chongfuData = [];

    for (var x = 0; x < chongfuIdArr.length; x++){
        var obj = {};
        var sum = 0;
        obj.id = 0;
        for (var y = 0; y < array.length; y++){
           if(chongfuIdArr[x] === array[y]["id"]){
               sum += array[y]["num"];
               obj.id = chongfuIdArr[x];
           }else{
               continue;
           }
        }
        obj.num = sum;
        chongfuData.push(obj);
    }

    console.log("chongfuData json:" + JSON.stringify(chongfuData));

    for (var index = 0; index < chongfuData.length;index++){
        for (var z = 0; z < array.length;){
            if(array[z].id === chongfuData[index].id){
                array.splice(z,1);
            }else{
                z++;
            }
        }
    }

    for (var i = 0; i < chongfuData.length; i++){
        array.push(chongfuData[i]);
    }

    // sumChongfuItemAndDeleteChongfu(array);

    console.log("now array json:" + JSON.stringify(array));
}

//元素在数组中是否重复
function isElementChongfuInArray(arr,elm) {

    var nEqualTimes = 0;
    for (var i = 0; i < arr.length; i++){
        if(arr[i] === elm){
            nEqualTimes++;
        }
    }
         return nEqualTimes <= 1 ? false:true;}

//元素是否在数组中
function isElmInArray(arr,elm) {
    for (var i = 0; i < arr.length; i++){
        if(arr[i] === elm){
            return true;
        }
    }
    return false;
}

//计算重复的求和  并且 删除重复的
function sumChongfuItemAndDeleteChongfu(array) {
    var idArray = [];
    for (var i = 0; i < array.length; i++){
        idArray.push(array[i].id);
    }

    //查找到重复id
    var chongfuIdArr = [];
    for (var j = 0; j < idArray.length; j++){
        if(isElementChongfuInArray(idArray,idArray[j])){
            if(!isElmInArray(chongfuIdArr,idArray[j])){
                chongfuIdArr.push(idArray[j]);
            }
        }
    }

    //重复项求和
    var chongfuData = [];
    for (var x = 0; x < chongfuIdArr.length; x++){
        var obj = {};
        var sum = 0;
        obj.id = 0;
        for (var y = 0; y < array.length; y++){
            if(chongfuIdArr[x] === array[y]["id"]){
                sum += array[y]["num"];
                obj.id = chongfuIdArr[x];
            }
        }
        obj.num = sum;
        chongfuData.push(obj);
    }

    //删除重复项
    for (var index = 0; index < chongfuData.length;index++){
        for (var z = 0; z < array.length;){
            if(array[z].id === chongfuData[index].id){
                array.splice(z,1);
            }else{
                z++;
            }
        }
    }

    //追加原先的重复项
    for (var i = 0; i < chongfuData.length; i++){
        array.push(chongfuData[i]);
    }

}

 

function unique(quan_lst){    
//去掉重复选取的数据
    for (var i = 0; i < quan_lst.length; i++) {
        for (var j =i+1; j <quan_lst.length; ) {
            if (quan_lst[i].photoid == quan_lst[j].photoid ) {//通过photoid属性进行匹配;
                quan_lst.splice(j, 1);//去除重复的对象;
            }else {
                j++;
            }
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值