【问题标题】:Making a matrix of lists by concatenating several arrays通过连接多个数组来制作列表矩阵
【发布时间】:2017-11-30 23:31:52
【问题描述】:

我正在尝试创建一个包含多个数组的每个可能组合的编译列表。我有 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' ]

等等。这些列将被组织成第一列是黑麦面包,第二列是白面包,第三列是小麦面包。我想做的事情有名字吗?即使我向每个数组添加新内容,它也需要工作。感谢任何回答的人!

【问题讨论】:

标签: javascript arrays loops matrix concatenation


【解决方案1】:

三个嵌套的 for 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
        }
    }
}

【讨论】:

    【解决方案2】:

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

    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);

    3 个嵌套的 forEach 循环

    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);

    【讨论】:

    • 这几乎正是我所需要的。有什么办法可以让第一列只有黑麦组合,第二列只有白色组合,第三列只有小麦组合?
    • 我已经更新了答案,包括按面包类型划分的三个子数组。更新您的问题以包含此请求。
    猜你喜欢
    • 2017-06-16
    • 2012-06-09
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多