分享一道算法题

用一个函数实现

input:

1
2
3
4
5
[
{ id: '10', des: '品种', type: ['藏獒', '柴犬', '哈士奇'] },
{ id: '11', des: '颜色', type: ['黑色', '黄色'] },
{ id: '12', des: '体型', type: ['小型', '大型'] }
]

except output:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
{'10':'藏獒','11':'黑色','12':'小型'},
{'10':'藏獒','11':'黑色','12':'大型'},
{'10':'藏獒','11':'黄色','12':'小型'},
{'10':'藏獒','11':'黄色','12':'大型'},
{'10':'柴犬','11':'黑色','12':'小型'},
{'10':'柴犬','11':'黑色','12':'大型'},
{'10':'柴犬','11':'黄色','12':'小型'},
{'10':'柴犬','11':'黄色','12':'大型'},
{'10':'哈士奇','11':'黑色','12':'小型'},
{'10':'哈士奇','11':'黑色','12':'大型'},
{'10':'哈士奇','11':'黄色','12':'小型'},
{'10':'哈士奇','11':'黄色','12':'大型'}
]

可以先不看答案,思考一下。

解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function recursion(arr, index = 0, obj = {}, retArr = []) {
const current = arr[index];
if (!current || current.type.length <= 0) {
retArr.push(obj);
return;
}
for (const type of current.type) {
const item = { ...obj };
item[current.id] = type;
recursion(arr, index + 1, item, retArr);
}
return retArr;
}

const ret = recursion(input);
console.log(ret);
原创技术分享,您的支持将鼓励我继续创作