检查此Javascript代码是否“枯燥”或效率低下

检查此Javascript代码是否“枯燥”或效率低下,javascript,palindrome,Javascript,Palindrome,我做了一个JS练习,需要从一串数字中创建回文。这是可行的,但我相信有一种更简洁的方法来实现这一点 来自edabit.com的指导: 数字可能不是回文,但它的后代可以是。数字的直接子代是通过对每对相邻数字求和来创建下一个数字的数字而创建的。创建一个函数,如果数字本身是回文或其任何一个低至2位的后代,则返回true 您的结果是一个隐式全局变量,这是一个糟糕的做法。在严格模式下运行时,脚本将抛出错误 未捕获引用错误:未定义结果 在很多地方,您可以使用+value.split,这样就可以将其移动到可重用

我做了一个JS练习,需要从一串数字中创建回文。这是可行的,但我相信有一种更简洁的方法来实现这一点

来自edabit.com的指导:

数字可能不是回文,但它的后代可以是。数字的直接子代是通过对每对相邻数字求和来创建下一个数字的数字而创建的。创建一个函数,如果数字本身是回文或其任何一个低至2位的后代,则返回true

您的结果是一个隐式全局变量,这是一个糟糕的做法。在严格模式下运行时,脚本将抛出错误

未捕获引用错误:未定义结果

在很多地方,您可以使用+value.split,这样就可以将其移动到可重用的函数中

newStr最初实际上是一个数字,而不是字符串。将不同的类型重新分配给单个变量是不好的,原因有两个:它会让程序员在阅读代码时感到困惑,而且还会因为变量类型的不一致而使代码去优化

您的checkEquality没有实现它所声称的功能。除了检查相等性外,它还检查字符串形式的值的长度是否大于或等于2。您应该确保在编写函数时,它们的实际操作与其名称所暗示的意图一致

最后,您的sumPair可以通过在for语句中只增加i来稍微提高可读性。这就是导致我最初对您的实现和关于无限增长的评论感到困惑的原因

综上所述,您可以编写一个如下所示的实现:

函数toStringArray值{ 返回值.toString.split; } 函数反向限制值{ 返回值.split.reverse.join; } 函数对值{ 常量数组=ToString GarrayValue.mapNumber; 常数对=[]; 对于设i=0;i=2&&palindromegenderstant; }
console.logpalindromegenderant11230;如果函数运行正常,并且您正在寻找更好的编写方法的建议,那么这是一个合适的发布位置。你在哪里看到重复的代码?我投票结束这个问题,因为代码审查不属于堆栈溢出。它应该发布在:关于无限增长,问题是每一对都需要这样求和:11211230➞ 2333➞ 56➞ 11因此,调用函数时需要使用偶数位数。我尝试调用的挑战是仅使用偶数位数的参数,并按照我指定的方式添加它们。我的程序正在这样做。我用他们所有的例子进行了检查,得到了相同的结果results@JeffS感谢您的澄清,我刚刚错过了您在for循环体中调用I++的地方,因此我更新了我的建议,以提高其可读性。
function palindromeDescendant(input) {

  let newStr = input;
  let newRevStr = (""+input).split('').reverse().join('');

  checkEquality(newStr, newRevStr);

  function checkEquality(a, b) {

    if (a != b && (""+a).split('').length >= 2) {
      sumPair(a);
    } else if (a != b) {
        result = `${false}: ${a}`;
    } else {
      result = `${true}: ${a}`;
    }
  }

  function sumPair(nums) {
    const a = (""+nums).split('').map(Number);
    let b = [];

    for (let i = 0; i < a.length -1; i++) {
      b.push(a[i] + a[i + 1]);
      i++
    }
    newStr = b.join('');
    newRevStr = newStr.split('').reverse().join('');
    checkEquality(newStr, newRevStr);
  }
  return result;
}