2016-06-13 10 views
-3

私はこの問題に取り組んでいます。なぜなら、私の人生は、.lengthが正しい値にならない理由を理解できません。それは関数が完了するのを待っていないことを意味する0とだけ返します。Javascript - .length returns 0

sortPerms.lengthを返す前に、配列の長さが等しいのを待っているカウンタとifステートメントを使用しようとしました。しかし、それは最初に真実であると評価されます。

配列 "sortPerms"を返すだけでは、配列の正しい値が返されます。

ご協力いただければ幸いです。

var regex = /(.)\1+/g; 
var sortPerms = []; 
function permAlone (str) { 
    var perms = [], combos = [], letterOne = str[0]; 
    if (str.length === 1) { 
     perms.push(str); 
     return perms; 
    } 

    str = str.substring(1,str.length); 
    combos = permAlone(str); 

    for (var i = 0; i < combos.length; i++) { 
     for (var j = 0; j < combos[i].length + 1; j++) { 
      perms.push(combineCombos(combos[i], letterOne, j)); 
     } 
    } 
    sortPerms = perms.filter(function(string){ 
     return !string.match(regex); 
    }); 
    return sortPerms.length; 
} 


function combineCombos(combo, lettersIn, i) { 
    var begin = combo.substring(0,i); 
    var end = combo.substring(i,combo.length); 
    return begin + lettersIn + end; 
} 
+1

あなたはコードが何をしたいですか? – trincot

+1

これはかなり複雑なアルゴリズムであり、変数名はあなたが達成しようとしていることをあまり説明していません。期待される出力が与えられていないときに何が間違っているのかを知ることは難しく、出力をどのように得るべきかについての説明もありません。 – 4castle

+0

これはおそらく '.length'が' 0'を返す理由ではありません。 JavaScriptでは '.length'は文字列の静的なプロパティです。 'string.length'が' 0'を返した場合は、空の文字列を探しています。 – olleicua

答えて

0

問題は機能が時々アレイ(return perms;)、他の場合である戻り値を有することである数(return sortPerms.length):ここ

コードです。しかし、関数を再帰的に呼び出すと(combos = permAlone(str))、配列(combos.length)が明白になるはずです。

ので、最終的なreturn文は次のようになります。

return sortPerms; 

そして今、次の呼び出し:

permAlone("abc"); 

リターン:

["abc","bac","bca","acb","cab","cba"] 

...あなたが後にあるかと思われます。

あなたは、配列の長さが必要な場合は、その後、return文であることをコーディングするが、あなたの呼び出しでそれをしない:

console.log(permAlone("abc").length); // 6 
+0

これはあなたの質問に答えましたか?あなたはコメントを残すことができますか? – trincot