示例数组:
var array1 = ['Bob', 'Tina'];
var array2 = [0, 100];
我可以通过两个数组找到嵌套循环的可能组合。但这会给我一个输出:
var array1 = ['Bob', 'Tina'];
var array2 = [0, 100];
var options = []
array1.forEach(function (name) {
array2.forEach(function (number) {
options.push([name, number])
})
})
console.log(options);
> [ [ 'Bob', 0 ], [ 'Bob', 100 ], [ 'Tina', 0 ], [ 'Tina', 100 ] ]
这篇文章(Creating Combinations in JavaScript)给出了上面的输出
但我真正想要的就是给我这样的安排/组合:
[
[['Bob', 0], ['Tina', 0]],
[['Bob', 0], ['Tina', 100]],
[['Bob', 100], ['Tina', 0]],
[['Bob', 100], ['Tina', 100]]
]
它需要能够扩展更长的数组,但2x2是最简单的例子。
这里的笛卡尔式例子(Matrix combinations of two arrays in javascript)也给了我分解字符串而不是相关的安排:
[ { '0': 'B', '1': 'o', '2': 'b' },
{ '0': 'B', '1': 'o', '2': 'b' },
{ '0': 'T', '1': 'i', '2': 'n', '3': 'a' },
{ '0': 'T', '1': 'i', '2': 'n', '3': 'a' } ]
我一直在浏览google和SO,但是我遇到了障碍,因为我不确定我到底在寻找什么。
答案 0 :(得分:1)
我希望这可以帮助您获得实际组合:
var array1 = ['Bob', 'Tina'];
var array2 = [0, 100];
var resultArray = []
for (var i = 0; i < array1.length; i++) {
for (var j = 0; j < array2.length; j++) {
var tempArray = [];
tempArray.push(array1[i]);
tempArray.push(array2[j]);
resultArray.push(tempArray);
}
}
for (var i = 0; i < array2.length; i++) {
for (var j = 0; j < array1.length; j++) {
var tempArray = [];
tempArray.push(array1[j]);
tempArray.push(array2[i]);
resultArray.push(tempArray);
}
}
console.log(resultArray);
答案 1 :(得分:0)
这解决了问题,但不知道它有多高效 - 我敢打赌,有更好的方法可以做到这一点。
var array1 = ['Bob', 'Tina', 'Sam'];
var array2 = [0, 100, 200];
var resultCount = Math.pow(array2.length, array1.length);
var results = new Array(resultCount);
for(var i = 0; i < resultCount; i++) {
results[i] = new Array(array1.length);
}
for(var row = 0; row < resultCount; row++) {
for(var column = 0; column < array1.length; column++) {
var result = row * array1.length + column;
var category = array1.length * Math.pow( array2.length, array1.length - 1 - column);
var idx = ~~(result / category) % array2.length;
results[row][column] = [ array1[column], array2[idx] ];
}
}
console.log(results);
我认为你可以通过将array2视为基数(每个值映射到一个数字)和array1作为数字来实际执行数字/字符串操作。只要array2有36个或更少的元素,你就可以将每个数字从0转换为组合的数量作为字符串(Number.toString(radix)
),然后将结果字符串中的每个字符转换回数组的索引。 / p>
答案 2 :(得分:0)
我会给你一些你可能会觉得有用的提示。首先,我假设您知道如何迭代数组:
var array1 = ['Bob', 'Tina'];
for (var i = 0; i < array1.length; i++) {
// you can access the ith element using array1[i]
// for example:
alert(array1[i]);
}
我还假设您知道如何执行嵌套循环:
var array1 = ['Bob', 'Tina'];
var array2 = [0, 100];
for (var i = 0; i < array1.length; i++) {
for (var j = 0; j < array2.length; j++) {
alert(array1[i] + " " + array2[j]):
}
}
您可能缺少的是如何构建新数组:
var five = 5;
var six = 6;
var myArray = [five, six];
您也可能无法将新阵列推送到现有的&#34; master&#34;阵列:
var five = 5;
var six = 6;
var masterArray = [];
for (var i = 0; i < 10; i++) {
masterArray.push([five, six]);
}
希望这有帮助,祝你好运!