我正在开发一个商城
在开发【发布商品】的模块时,遇到了一个问题,希望高手解答
现在有多个数组:
a = [1,2,3,4,5]
b = [a,b,c]
c = [A,Z]
请问如何才能重组成类似于下面的数组
mix = ['1aA','1aZ','1bA','1bZ','1cA','1cZ','2aA','2aZ'..........]
请问大佬如何实现呢?另外,这种功能叫什么?
我正在开发一个商城
在开发【发布商品】的模块时,遇到了一个问题,希望高手解答
现在有多个数组:
a = [1,2,3,4,5]
b = [a,b,c]
c = [A,Z]
请问如何才能重组成类似于下面的数组
mix = ['1aA','1aZ','1bA','1bZ','1cA','1cZ','2aA','2aZ'..........]
请问大佬如何实现呢?另外,这种功能叫什么?
这个问题和 Vue 无关,就是纯纯的 JS 的问题,甚至都可以语言无关。建议改下标题。
固定数组个数(3个以内)用多重循环遍历,非固定数量的第一反应是用递归。
function combo(...arrays) {
if (!arrays.length) { return []; }
const [current, ...rest] = arrays;
return rest.length
? combo(...rest).flatMap(r => current.map(c => `${c}${r}`))
: current;
}
// 调用示例
console.log(combo(a, b, c));
但实际上,这是一个尾递归,可以用循环来实现(使用了 reduce,实际就是循环)
function combo(...arrays) {
return arrays.reduce(
(r, row) => r.flatMap(it => row.map(c => `${c}${it}`)),
[""]
);
}
console.log(combo(a, b, c));
// 首先计算[1,2,3,4,5] * ['a','b','c'],得到结果[1a, 1b, 1c, 2a, 2b, 2c...]
// 然后计算[1a, 1b, 1c, 2a, 2b, 2c...] * [A, Z],得到最终结果[1aA, 1aZ, 1bA, 1bZ, 1cA, 1cZ...]
let a = [1,2,3,4,5]
let b = ['a','b','c']
let c = ['A','Z']
let d = ['q','w']
function permutation (val) {
return val.reduce((prev, cur) => {
let arr = []
prev.forEach(v => {
cur.forEach(it => {
arr.push(`${v}${it}`)
})
})
return arr
})
}
console.log(permutation([a, b]))
console.log(permutation([a, b, c]))
console.log(permutation([a, b, c, d]))
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
固定数组解法:

任意数组解法:
