【问题标题】:Create array with all unique combinations创建具有所有唯一组合的数组
【发布时间】:2012-12-06 19:18:24
【问题描述】:

不知道如何创建一个包含所有匹配项的数组。我想我需要一个递归函数。

我喜欢从下面的 JSON 中获取所有值,并创建一个包含所有值组合的数组。 可能有更多或更少的模型(名称4)和更多或更少的值。 有什么帮助吗?

var models = [
    {
        name: 'Name1',
        values: [
            'Title1Value1',
            'Title1Value2',
            'Title1Value3'
        ]
    },
    {
        name: 'Name2',
        values: [
            'Title2Value1',
            'Title2Value2'
        ]
    },
    {
        name: 'Name3',
        values: [
            'Title3Value1',
            'Title3Value2'
        ]
    }
];

// Output array
var matches = [
    [ 'Title1Value1', 'Title2Value1', 'Title3Value1' ],
    [ 'Title1Value1', 'Title2Value1', 'Title3Value2' ],
    [ 'Title1Value1', 'Title2Value2', 'Title3Value1' ],
    [ 'Title1Value1', 'Title2Value2', 'Title3Value2' ],
    [ 'Title2Value2', 'Title2Value1', 'Title3Value1' ],
    [ 'Title1Value2', 'Title2Value1', 'Title3Value2' ],
    [ 'Title1Value2', 'Title2Value2', 'Title3Value1' ],
    [ 'Title1Value2', 'Title2Value2', 'Title3Value2' ],
    [ 'Title1Value3', 'Title2Value1', 'Title3Value1' ],
    [ 'Title1Value3', 'Title2Value1', 'Title3Value2' ],
    [ 'Title1Value3', 'Title2Value2', 'Title3Value1' ],
    [ 'Title1Value3', 'Title2Value2', 'Title3Value2' ]
];

【问题讨论】:

    标签: javascript


    【解决方案1】:
    var indices = [];
    var lengths = [];
    for (i = 0; i<models.length; i++) {
        indices[i] = 0;
        lengths[i] = models[i].values.length;
    }
    var matches = [];
    while (indices[0] < lengths[0]) {
        var row = [];
        for (i = 0; i<indices.length; i++) {
           row.push(models[i].values[indices[i]]);
        }
        matches.push(row);
        /* Cycle the indexes */
        for (j = indices.length-1; j >= 0; j--) {
            indices[j]++;
            if (indices[j] >= lengths[j] && j != 0) {
                indices[j] = 0;
            } else {
                break;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2013-04-25
      • 2016-02-15
      • 1970-01-01
      相关资源
      最近更新 更多