以项目中用到的数组排列组合为例,下图是最后的效果图(图只是用来说明并不具体实现):
数 据 \color{#ed1941}{数据} 数据
data() {
return {
arr: [
[{ name: "院区1", number: "001" }, { name: "院区2", number: "002" }], //对应图中条件1的数据
[{ name: "部门1", number: "001" }, { name: "部门2", number: "002" }], //对应图中条件2的数据
[{ name: "仓库1", number: "001" }, { name: "仓库2", number: "002" }], //对应图中条件3的数据
]
};
},
方 法 \color{#ed1941}{方法} 方法
methods:{
multiplyData(newArrData) {
let len = newArrData.length;
// 当数组长度大于等于2时
if (len >= 2) {
// 第一个数组的长度
let len1 = newArrData[0].length;
// 第二个数组的长度
let len2 = newArrData[1].length;
// 申明一个新数组,做数据暂存
let items = new Array();
// 申明新数组的索引
let index = 0;
// 2层嵌套循环,将组合放到新数组中
for (var i = 0; i < len1; i++) {
for (var j = 0; j < len2; j++) {
if (items.length < index + 1) {
items.push([])
}
if (newArrData[0][i] instanceof Array) {
items[index] = items[index].concat(newArrData[0][i].concat(newArrData[1][j]));
} else {
items[index] = items[index].concat([newArrData[0][i], newArrData[1][j]]);
}
index++;
}
}
// 将新组合的数组并到原数组中
let newArr = new Array(len - 1);
for (let i = 2; i < newArrData.length; i++) {
newArr[i - 1] = newArrData[i];
}
newArr[0] = items;
// 执行回调
return this.multiplyData(newArr);
} else {
console.log(newArrData[0]);
return newArrData[0];
}
}
}
调 用 \color{#ed1941}{调用} 调用
mounted(){
let data = this.multiplyData(this.arr);
console.log('data', data);
}
处理后的数据结构:
[
[
{
"name": "院区1",
"number": "001"
},
{
"name": "部门1",
"number": "001"
},
{
"name": "仓库1",
"number": "001"
}
],
[
{
"name": "院区1",
"number": "001"
},
{
"name": "部门1",
"number": "001"
},
{
"name": "仓库2",
"number": "002"
}
],
[
{
"name": "院区1",
"number": "001"
},
{
"name": "部门2",
"number": "002"
},
{
"name": "仓库1",
"number": "001"
}
],
[
{
"name": "院区1",
"number": "001"
},
{
"name": "部门2",
"number": "002"
},
{
"name": "仓库2",
"number": "002"
}
],
[
{
"name": "院区2",
"number": "002"
},
{
"name": "部门1",
"number": "001"
},
{
"name": "仓库1",
"number": "001"
}
],
[
{
"name": "院区2",
"number": "002"
},
{
"name": "部门1",
"number": "001"
},
{
"name": "仓库2",
"number": "002"
}
],
[
{
"name": "院区2",
"number": "002"
},
{
"name": "部门2",
"number": "002"
},
{
"name": "仓库1",
"number": "001"
}
],
[
{
"name": "院区2",
"number": "002"
},
{
"name": "部门2",
"number": "002"
},
{
"name": "仓库2",
"number": "002"
}
]
]