Javascript-.length返回0
所以我一直在研究这个问题,我一辈子都不知道为什么。长度没有得到正确的值。它只返回0,我认为这意味着它没有等待函数完成 在返回sortPerms.length之前,我尝试让一个计数器和一个if语句等待数组的长度相等。但一开始它的评估结果是正确的 如果我只返回数组“sortPerms”,它将返回数组中正确数量的值 任何帮助都将不胜感激 以下是代码:Javascript-.length返回0,javascript,arrays,filter,Javascript,Arrays,Filter,所以我一直在研究这个问题,我一辈子都不知道为什么。长度没有得到正确的值。它只返回0,我认为这意味着它没有等待函数完成 在返回sortPerms.length之前,我尝试让一个计数器和一个if语句等待数组的长度相等。但一开始它的评估结果是正确的 如果我只返回数组“sortPerms”,它将返回数组中正确数量的值 任何帮助都将不胜感激 以下是代码: var regex = /(.)\1+/g; var sortPerms = []; function permAlone (str) { v
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更具可读性。通过使用有会说话的名字的简短方法,代码可以对我们大喊它在做什么:-),但目前很难破译到底发生了什么。这回答了你的问题吗?你能留下评论吗?