0

すべての一致を含む配列を作成する方法がわかりません。これには再帰関数が必要だと思います。

以下の JSON からすべての値を取得し、すべての値の組み合わせで配列を作成します。モデル (Name4) と値の数は増減する可能性があります。何か助けはありますか?

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' ]
];
4

1 に答える 1

0
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;
        }
    }
}
于 2012-12-06T11:18:24.513 に答える