JavaScript 找到数组值的所有组合
任务是获取数组的笛卡尔积(在连接它们后找到所有组合)。这里使用JavaScript讨论了2种方法。
方法:
- 使用JavaScript Array.reduce()方法
- 使用递归方法
方法1
- 首先,声明一个包含多个数组的数组。
- 使用递归解决问题。当数组长度减少为零时,返回到目前为止构建的字符串。否则
- 通过reduce()方法减少第一个数组元素,并返回递归结果返回(在离开数组的第一项后每次调用递归)加上与每个数组元素串联在一起的先前值。
- 返回包含所有组合的最终结果数组。
示例1: 此示例使用JavaScript Aarry.reduce()方法实现上述方法。
let arr = [
['m', 'n'],
['c'],
['d', 'e', 'f']
];
function getCombn(arr, pre) {
pre = pre || '';
if (!arr.length) {
return pre;
}
let ans = arr[0].reduce(function (ans, value) {
return ans.concat(getCombn(
arr.slice(1), pre + value));
}, []);
return ans;
}
console.log(getCombn(arr));
输出
[ 'mcd', 'mce', 'mcf', 'ncd', 'nce', 'ncf' ]
方法2
- 首先,声明一个包含多个数组的数组。
- 使用递归来解决问题。基本条件是当数组的长度减少到1时,返回数组的那个元素。否则,
- 在离开数组的第一个元素后调用递归,并将结果存储在一个变量(otherCases)中。
- 遍历数组(otherCases)的每个元素,并在每个元素中遍历数组(arr)的第一个元素。
- 将数组(arr [0])的每个元素与数组(otherCases)连接起来,并将结果推入答案数组中。
示例2: 此示例使用JavaScript中的递归实现了上述方法。
// Create new array
let arr = [
['m', 'n'],
['c'],
['d', 'e', 'f']
];
// Funtion to get all combinations
function getCombn(arr) {
// When array contain 1 element
if (arr.length == 1) {
return arr[0];
} else {
let ans = [];
// Recur with the rest of the array.
let otherCases = getCombn(arr.slice(1));
for (let i = 0; i < otherCases.length; i++) {
for (let j = 0; j < arr[0].length; j++) {
ans.push(arr[0][j] + otherCases[i]);
}
}
return ans;
}
}
// Display output
console.log(getCombn(arr));
输出
[ 'mcd', 'ncd', 'mce', 'nce', 'mcf', 'ncf' ]