通过连接多个数组来创建列表矩阵

时间:2017-11-30 23:31:52

标签: javascript arrays loops matrix concatenation

我正在尝试创建一个包含多个数组的每个可能组合的编译列表。我有matlab的背景知识,所以我对循环和基本代码原理的工作方式有些熟悉。但是,我不确定将几个数组的列表编译成这些列表的矩阵的最有效方法是什么。我最初制作了一个包含所有可能组合的矩阵,但是我意识到,如果我决定将一个组件添加到其中一个数组中,则需要花费太多时间来更新每个条目。我尝试使用push命令来解释这一点:

matrix=[array1, array2, array3]
var newMeat= 'pastrami'
matrix[1].push(bread[1] + '-' + newMeat + ....)

所以我可以从一个ui输入它,但它变得凌乱。例如,我有一个基本数组:

bread=['rye', 'white', 'wheat']

我希望为每种类型与

等其他数组组合制作一个列表
meat = [ 'roast beef', 'ham', 'turkey' ]
condiments = [ 'mayo', 'mustard','ketchup' ]

所以它看起来像这样:

combinations = [ 'rye-roast beef-mayo',    'white-roast beef-mayo',  . 'wheat-roast beef-mayo' 
                 'rye-roast beef-mustard', 'white-roast beef-mustard', 'wheat-roast beef-mustard'
                 'rye-roast beef-ketchup', 'white-roast beef-ketchup', 'wheat-roast beef-ketchup' ]

等等。将组织列,使第一列用于黑麦面包,第二列用于白面包,第三列用于小麦面包。我正在尝试做什么名称?即使我向每个数组添加新内容,它也需要工作。感谢任何回答的人!

2 个答案:

答案 0 :(得分:1)

三个嵌套in循环,遍历每个组合:



var bread = ['rye', 'white', 'wheat'];
var meat = ['roast beef', 'ham', 'turkey'];
var condiments = ['mayo', 'mustard', 'ketchup'];

for (var b in bread) {
    for (var m in meat) {
        for (var c in condiments) {
            console.log (bread[b] + "-" + meat[m] + "-" + condiments[c]); // Or wherever you want this result to go
        }
    }
}




答案 1 :(得分:0)

每个组件都需要一个循环。

3嵌套for循环



var bread=['rye', 'white', 'wheat'];
var meat = [ 'roast beef', 'ham', 'turkey'];
var condiments = [ 'mayo', 'mustard','ketchup'];

var result = [];
for(var i = 0; i < bread.length; i++) {
  result.push([]);
  for(var j = 0; j < bread.length; j++) {
    for(var k = 0; k < bread.length; k++) {
      result[i].push(bread[i] + '-' + meat[j] + '-' + condiments[k]);
    }
  }
}

console.log(result);
&#13;
&#13;
&#13;

OR

3嵌套forEach循环

&#13;
&#13;
var bread=['rye', 'white', 'wheat'];
var meat = [ 'roast beef', 'ham', 'turkey'];
var condiments = [ 'mayo', 'mustard','ketchup'];

var result = [];
bread.forEach(function(b) {
  result.push([]);
  meat.forEach(function(m) {
    condiments.forEach(function(c) {
      result[result.length - 1].push(b + '-' + m + '-' + c);
    });
  })
});

console.log(result);
&#13;
&#13;
&#13;