不能从一个递归函数内返回的数组的长度用于创建串排列的阵列

问题描述 投票:0回答:1

我想返回后递归查找字符串的排列产生的阵列的长度。该代码工作正常,并产生排列的正确阵列,但是当我尝试返回filtered.length我收到以下错误信息:Uncaught TypeError: otherPerms is not iterable

这同样的错误还当我尝试对其进行筛选,因为我想要的结果之前返回数组的长度发生。

下面的效果很好,如果我return filtered然后调用该函数:

let permutation = permutate('aab'); console.log(permutation.length); // 2 console.log(permutation); // ["aba", "aba"]

但是,我希望能够从函数内返回数组的长度。

直到我尝试返回所产生的阵列的长度如下作品如预期的代码:

function permutate(str) {
    let result = [];

    if (str.length === 1) {
      result.push(str);
    }

    for (let i = 0; i < str.length; i++) {
      var firstChar = str[i];
      var otherChar = str.substring(0, i) + str.substring(i + 1);
      var otherPerms = permutate(otherChar);

      for (let perm of otherPerms) {
        result.push(firstChar + perm);
      }
    } 

    let filtered = result.filter((str) => !(/(\w)\1/).test(str)); // To get permutations with non-repeating adjacent letters
    return filtered;
}
javascript arrays recursion permutation
1个回答
2
投票

如果您尝试从函数内返回长度递归不会工作,你不再返回什么“otherPerms”的需求。

如果你希望它返回的长度,你就必须包装内另外一个功能

function permutate(str) {

	return recursivePermutate(str).length;

	function recursivePermutate(str) {
		let result = [];

	    if (str.length === 1) {
	      result.push(str);
	    }

	    for (let i = 0; i < str.length; i++) {
	      var firstChar = str[i];
	      var otherChar = str.substring(0, i) + str.substring(i + 1);
	      var otherPerms = recursivePermutate(otherChar);

	      for (let perm of otherPerms) {
	        result.push(firstChar + perm);
	      }
	    } 

	    let filtered = result.filter((str) => !(/(\w)(?=\1)/).test(str)); // To get permutations with non-repeating adjacent letters
	    return filtered;
	}
    
}

console.log(permutate("ab"))
© www.soinside.com 2019 - 2024. All rights reserved.