reduce实现排列组合
程序员文章站
2022-05-21 23:05:10
...
之前需求需要排列组合,然后参考这个链接后,发现了用js的高阶函数reduce
去解决不定长二维数组的排列组合问题;
var data = {
color: ['color1', 'color2', 'color3'],
size: ['size1', 'size2', 'size3'],
style: ['style1', 'style2', 'style3']
}
Object.values(data).reduce( (result, property) => {
return property.reduce( (acc, value) => {
return acc.concat(result.map( ele => [].concat(ele, value)));
}, []);
});
// 数组
var data = {
color: ['color1', 'color2', 'color3'],
size: ['size1', 'size2', 'size3'],
style: ['style1', 'style2', 'style3']
}
// 循环每一个商品属性
Object.keys(data).reduce( (result, key) => {
// 循环属性的每一个值
return data[key].reduce( (acc, value) => {
// 对于第一个属性
if (!result.length) {
// 将数值转化为对象格式
return acc.concat({ [key]: value });
}
// 对于第一个之后的属性,将新的属性和值添加到已有结果,并进行拼接。
return acc.concat( result.map( ele => (Object.assign({}, ele, { [key]: value }) )));
}, []);
}, []);
// 对象
相当于两层循环
上一篇: Spring Bean的初始化过程
下一篇: php实现排列组合