1

文字列をセパレーターで分割し、可能な組み合わせを見つける最もエレガントな方法を探しています。

例えば:

'foo.bar.baz'

=>

['foo', 'foo.bar', 'foo.bar.baz']

underscorejs を使用してもかまいません。

編集:

私がこれまでに試したこと

function comb(words) {                                                                                                                       
    var combinations = [];
    for (var i = 0; i < words.length; i++) {  
        var currentState = [];                                                                                                               
        for (var j = 0; j <= i; j++) {                                                                                                       
            currentState.push(words[j]);                                                                                                     
        }                                                                                                                                    
        console.log('current state', currentState.join('.'));                                                                                
        combinations.push(currentState.join('.'));                                                                                           
    }                                                                                                                                        
    return combinations;                                                                                                                     
}                                                                                                                                            

console.log('combinations', comb('foo.bar.baz'.split('.')));    

出力するcombinations [ 'foo', 'foo.bar', 'foo.bar.baz' ]

ネストされた状態のアプリにこれを使用しています。例:home.users.list次の状態がアクティブになっています: homehome.usershome.users.list

4

3 に答える 3

0

何が「最もエレガント」なのかはわかりませんが、アンダースコアを使用したかなりコンパクトなソリューションを次に示します。

function comb(words) {
    var accumulate = "";
    return _.map(words.split("."), function(word) {
        var t = accumulate + word;
        accumulate = t + ".";
        return t;
    });
 }

引数 tocombが分割する文字列であるという点で、例とは少し異なります。明らかに、関数内で行うのではなく、例のように呼び出す前に分割できます。

于 2013-09-07T05:11:16.080 に答える
0
function comb(words) {
    var combinations = [], temp = "";
    for (var i = 0; i < words.length; i++) {
        combinations.push(temp + words[i]);
        temp += words[i] + ".";
    }
    return combinations;
}

console.log('combinations', comb('foo.bar.baz'.split('.'))); 

出力

combinations [ 'foo', 'foo.bar', 'foo.bar.baz' ]
于 2013-09-07T05:12:01.917 に答える