我希望从数组中获取3个元素混合。 示例:
var arr = ['a', 'b', 'c'];
result :
['a', 'a', 'a']
['a', 'a', 'b']
['a', 'a', 'c']
['a', 'b', 'a']
['a', 'b', 'b']
['a', 'b', 'c']
['a', 'c', 'a']
['a', 'c', 'b']
['a', 'c', 'c']
['b', 'a', 'a']
['b', 'a', 'b']
['b', 'a', 'c']
['b', 'b', 'a']
['b', 'b', 'b']
['b', 'b', 'c']
['b', 'c', 'a']
['b', 'c', 'b']
['b', 'c', 'c']
['c', 'a', 'a']
['c', 'a', 'b']
['c', 'a', 'c']
['c', 'b', 'a']
['c', 'b', 'b']
['c', 'b', 'c']
['c', 'c', 'a']
['c', 'c', 'b']
['c', 'c', 'c']
请帮帮我!我尝试了很多方法仍然没有成功。 非常感谢!
答案 0 :(得分:1)
使用3个嵌套for循环,它将迭代每个位置的元素。
var arr = ['a', 'b', 'c'];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
for (var k = 0; k < arr.length; k++) {
console.log([arr[i], arr[j], arr[k]])
}
}
}
一种递归方法,适用于任意长度的数组。
var arr = ['a', 'b', 'c'];
function gen(arr, subArr) {
// iterate over the elements for nth position
for (var i = 0; i < arr.length; i++) {
// check currently iterating for the last element
if (subArr.length == arr.length - 1)
// concat ith element with the array
console.log(arr1.concat(arr[i]))
else
// otherwise recursively call the function
gen(arr, subArr.concat(arr[i]))
}
}
// call the function
gen(arr, []);
答案 1 :(得分:1)
您可以使用具有退出条件的递归方法来检查所需大小的长度。
此功能适用于任意长度。请注意,结果的长度为array.length size 。
function getCombinations(array, size) {
function fork(t) {
var i;
if (t.length === size) {
result.push(t);
return;
}
for (i = 0; i < array.length; i++) {
fork(t.concat([array[i]]));
}
}
var result = [];
fork([]);
return result;
}
console.log(getCombinations(['a', 'b', 'c'], 3));
.as-console-wrapper { max-height: 100% !important; top: 0; }