为什么使用while .join()会给我错误,而没有它起作用

时间:2019-09-19 16:51:27

标签: javascript

所以,我有这段代码,我只是想用js做相反的事情。我介绍了一个数字,它按照从max到low到low到max的顺序对自身进行排序,并带有两个变量max和min。我将最大值减去最小值,然后重复直到结果为6174。

我不知道为什么当我将所有这些都放一会儿时,max.join()给我一个错误:“未捕获的TypeError:max.join不是<'anonymous>:28:17处的函数”

但是暂时没有效果。

	var num = prompt('Introduzca un número de 4 digitos de al menos 2 digitos distintos', '1234');

	var output = [],
		sNum = num.toString(),
		n = 0,
		max = [],
	    min = [],
	    a = 0,
	    kap= 6174,
	    v = 1;
  
  	while (a != kap) {
      for (var i = 0, len = sNum.length; i < len; i++) {
        output.push(+sNum.charAt(i));
      }

      min = output.sort((a, b) => a - b );

      var x=3;

      for (var c = 0; c < 4; c++) {
        max[c] = min[x];
        x--;
      }

      min = min.join('');
      max = max.join('');
      sNum = parseInt(max)-parseInt(min);
      
      if (sNum == kap) {
      	a = kap;
      }
      else {
      	a = 0;
        v++;
      }
   }
   
   console.log(v);
   console.log(a);

	var num = prompt('Introduzca un número de 4 digitos de al menos 2 digitos distintos', '1234');

	var output = [],
		sNum = num.toString(),
		n = 0,
		max = [],
	    min = [],
	    a = 0,
	    kap= 6174,
	    v = 1;
  
      for (var i = 0, len = sNum.length; i < len; i++) {
        output.push(+sNum.charAt(i));
      }

      min = output.sort((a, b) => a - b );

      var x=3;

      for (var c = 0; c < 4; c++) {
        max[c] = min[x];
        x--;
      }

      min = min.join('');
      max = max.join('');
      sNum = parseInt(max)-parseInt(min);
   
   console.log(max);
   console.log(min);
   console.log(sNum);

非常感谢,我终于看到了问题,现在我已经完成了代码:)

	var num = prompt('Introduzca un número de 4 digitos de al menos 2 digitos distintos', '1234');

	var	sNum = num.toString(),
		n = 0,	
		a = 0,
		kap= 6174,
		v = 1;

	if (num == (1111 || 2222 || 3333 || 4444 || 5555 || 6666 || 7777 || 8888 || 9999 || 0000 || 0)) {
		console.log(8);
	}

	else if (num == 6174) {
		console.log(0);
	}

	else if (sNum.length < 4) {
		while (sNum.length < 4) {
			sNum = ('0' + sNum);
		}
		if (sNum == "0000") {
			console.log(8);
		}
		else {
			calculoKaprekar();
		}
	}

	else {
		calculoKaprekar();
	}

  	function calculoKaprekar () {
	  	while (a != kap) {
	  		var output = [];

	  		sNum = sNum.toString();

			for (var i = 0, len = sNum.length; i < len; i++) {
				output.push(+sNum.charAt(i));
			}
		
			var max = [],
				min = [];

			min = output.sort((a, b) => a - b );

			var x=3;

			for (var c = 0; c < 4; c++) {
				max[c] = min[x];
				x--;
			}

			min = min.join('');
			max = max.join('');
			sNum = parseInt(max)-parseInt(min);

			if (sNum == kap) {
				a = kap;
			}
			else {
				v++;
			}
	   }
	   console.log(v);
	}

1 个答案:

答案 0 :(得分:1)

第一次迭代max是一个您期望的数组:

[
  4,
  3,
  2,
  1
]

但是,在第一次迭代中,该值将被重新分配:

max = max.join('');

所以在第二次迭代中,它现在是"4321" (一个字符串)

并且"4321".join("")不是函数,因为join不是字符串函数。