Javascript-.length返回0

Javascript-.length返回0,javascript,arrays,filter,Javascript,Arrays,Filter,所以我一直在研究这个问题,我一辈子都不知道为什么。长度没有得到正确的值。它只返回0,我认为这意味着它没有等待函数完成 在返回sortPerms.length之前,我尝试让一个计数器和一个if语句等待数组的长度相等。但一开始它的评估结果是正确的 如果我只返回数组“sortPerms”,它将返回数组中正确数量的值 任何帮助都将不胜感激 以下是代码: var regex = /(.)\1+/g; var sortPerms = []; function permAlone (str) { v

所以我一直在研究这个问题,我一辈子都不知道为什么。长度没有得到正确的值。它只返回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;
}
var regex=/()\1+/g;
var-sortPerms=[];
函数(str){
var perms=[],combos=[],letterOne=str[0];
如果(str.length==1){
烫发推(str);
回烫;
}
str=str.substring(1,str.length);
combos=permolone(str);
对于(变量i=0;i
问题在于函数的返回值有时是数组(
返回perms;
),而在其他情况下是数字(
返回sortPerms.length
)。然而,当您递归调用函数(
combos=permolone(str)
)时,您显然希望得到一个数组(
combos.length

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

return sortPerms;
现在,请拨打以下电话:

permAlone("abc");
返回:

["abc","bac","bca","acb","cab","cba"]
。。。这似乎是你想要的

如果需要数组的长度,则不要在
return
语句中对其进行编码,而是在调用中进行编码:

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

您希望代码做什么?这是一个相当复杂的算法,并且变量名并不能很好地描述您要完成的任务。当我们没有得到预期的输出以及如何得到输出的解释时,很难知道哪里出了问题。这可能不是
.length
返回
0
的原因。在JavaScript中,length是字符串的静态属性。如果
string.length
返回
0
则您看到的是一个空字符串为
permolone()
函数提供一个递归元素。但是,
permolone()
函数正在
return
中输入一个数值(在
return sortPerms.length
sortPerms
的长度),当您将该返回值传递到
组合中时,该字符串不是您所期望的字符串
combos
没有保持预期的(必需的)值,此时您的算法失败,此后每次迭代都失败。PermOnline的函数调用是什么样子的?缩写perm代表什么?请看一下Robert C.Martin和Michael Feathers在youtube上发布的关于干净代码和重构的视频。通过使用重构技术“Extract method”,可以使函数perm更具可读性。通过使用有会说话的名字的简短方法,代码可以对我们大喊它在做什么:-),但目前很难破译到底发生了什么。这回答了你的问题吗?你能留下评论吗?