Javascript - .length returning 0



所以我正在研究这个问题,我一生都无法弄清楚为什么 .length 没有提出正确的值。它只返回 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;
}

问题是该函数的返回值有时是数组(return perms;),有时是数字(return sortPerms.length)。然而,当你递归调用函数(combos = permAlone(str))时,你显然期望一个数组(combos.length)。

因此,最终的返回语句应为:

return sortPerms;

现在以下调用:

permAlone("abc");

返回:

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

。这似乎是你所追求的。

如果你需要数组的长度,那么不要在 return 语句中编码,而是在你的调用中编码:

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

最新更新