js数组对象,值相同的组合在一起

在这里插入图片描述
需求:如上 对象数组进行组合 多字段组合

//定义多个字段重复值 进行组合 无序
let ceshiary = [
    {
        name: '张二',
        id: 2
    },
    {
        name: '张一',
        id: 15
    },
    {
        name: '张一',
        id: 1
    },
    {
        name: '张三',
        id: 3
    }, {
        name: '张四',
        id: 4

    }, {
        name: '张五',
        id: 55
    },
    {
        name: '张一',
        id: 15
    },
    {
        name: '张二'
        ,
        id: 2
    },
    {
        name: '张一',
        id: 15
    },
    {
        name: '张一',
        id: 1
    },
    {
        name: '张三',
        id: 3
    },
    {
        name: '张二'
        ,
        id: 25
    }, {
        name: '张三',
        id: 35
    }, {
        name: '张四',
        id: 4

    },
    {
        name: '张五',
        id: 5
    },
    {
        name: '张二'
        ,
        id: 2
    },
    {
        name: '张二'
        ,
        id: 25
    }, {
        name: '张三',
        id: 35
    }, {
        name: '张四',
        id: 4

    },
    {
        name: '张一',
        id: 15
    },
    {
        name: '张一',
        id: 1
    },
    {
        name: '张三',
        id: 3
    }, {
        name: '张四',
        id: 4

    }, {
        name: '张五',
        id: 55
    },
    {
        name: '张一',
        id: 15
    },
    {
        name: '张二'
        ,
        id: 25
    },
    {
        name: '张三',
        id: 35
    }, {
        name: '张四',
        id: 4

    }, {
        name: '张五',
        id: 5
    },
];
// 组合方法
let fn = function (ary, key) {
    return ary.reduce((total, next) => {
        let index = total.findIndex((item, index, self) => {
            return item[key] === next[key]
        })
        return index === -1 ? total.push(next) && total : total.splice(index, 0, next) && total
    }, [])
}
let xx = fn(ceshiary, 'name');// 主键组合
let ss=fn(xx, 'id'));// 次键二次组合

//二次组合 后结果如下

let ss = [
    {name: '张二', id: 25},
    {name: '张二', id: 25},
    {name: '张二', id: 25},
    {name: '张二', id: 2},
    {name: '张二', id: 2},
    {name: '张二', id: 2},
    {name: '张一', id: 15},
    {name: '张一', id: 15},
    {name: '张一', id: 15},
    {name: '张一', id: 15},
    {name: '张一', id: 15},
    {name: '张一', id: 1},
    {name: '张一', id: 1},
    {name: '张一', id: 1},
    {name: '张三', id: 35},
    {name: '张三', id: 35},
    {name: '张三', id: 35},
    {name: '张三', id: 3},
    {name: '张三', id: 3},
    {name: '张三', id: 3},
    {name: '张四', id: 4},
    {name: '张四', id: 4},
    {name: '张四', id: 4},
    {name: '张四', id: 4},
    {name: '张四', id: 4},
    {name: '张五', id: 5},
    {name: '张五', id: 5},
    {name: '张五', id: 55},
    {name: '张五', id: 55}
]

接收上次执行结果再执行,可依据多个键值进行组合;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值