代码之家  ›  专栏  ›  技术社区  ›  Emilio

使用.length时获取“typeError”不是函数

  •  5
  • Emilio  · 技术社区  · 7 年前

    function permAlone(string) {
      if (string.length < 2) return string; // This is our break condition
    
      var permutations = []; // This array will hold our permutations
    
      for (var i = 0; i < string.length; i++) {
        var character = string[i];
    
        // Cause we don't want any duplicates:
        if (string.indexOf(character) != i) // if char was used already
          continue; // skip it this time
    
        var remainingString = string.slice(0, i) + string.slice(i + 1, string.length); //Note: you can concat Strings via '+' in JS
    
        for (var subPermutation of permAlone(remainingString))
          permutations.push(character + subPermutation);
    
      }
    
      var permutationsFinal = [];
      for (var j = 0; j < (permutations.length); j++) {
        if (!(permutations[j].match(/([a-zA-Z])\1/))) {
          permutationsFinal.push(permutations[j]);
        }
      }
    
      return (permutationsFinal.length);
      //                       ^^^^^^^^ if I add this, the error is thrown
    }
    
    permAlone('abc');

    return (permutationsFinal);
    

    签署人:

    return (permutationsFinal.length);
    

    我在控制台中发现这个错误:

    permAlone 不是函数

    为什么?

    谢谢你的帮助!:)

    2 回复  |  直到 7 年前
        1
  •  3
  •   aduss    7 年前

    这是一个递归函数,如果您返回的不是函数本身所期望的内容,那么您将打破递归循环。

        2
  •  3
  •   traktor    7 年前

    for (var subPermutation of permAlone(remainingString)) 迭代函数的返回值(递归调用)。这是错误的行号。数字是不可iterable的,因此当您返回一个数字而不是一个数组时,它会抛出一个错误。

    不确定您使用的浏览器,但FireFox报告错误为

    TypeError:PermLone(…)不可编辑