需求:如上 对象数组进行组合 多字段组合
//定义多个字段重复值 进行组合 无序
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}
]
接收上次执行结果再执行,可依据多个键值进行组合;