Javascript - .length返回0

时间:2016-06-13 17:42:04

标签: javascript arrays filter

所以我正在研究这个问题而且我的生活中无法弄清楚为什么.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;
}

1 个答案:

答案 0 :(得分: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