【问题标题】:What's wrong with following code for string reverse in javascript?javascript中字符串反转的以下代码有什么问题?
【发布时间】:2017-08-30 10:54:59
【问题描述】:
function stringReverse(str){
    return str.split('').reverse().join('');
}

在一次采访中,我被要求反转一个字符串。我通过上面的代码解决了它,但我的面试官说这是一个糟糕的解决方案。然后我用循环,但他不高兴。

function stringReverse(str){
    var a = str.split(''), b=[];
    for(var i=0;i<arr.length;i++){
       b.push(a[a.length-1-i]);
    }
    return b.join('');
}

请添加您的 cmets。

【问题讨论】:

  • 可能是因为它无法正确处理超过 1 个字节的字符。
  • 我会读到这个 ​​- medium.freecodecamp.org/…。似乎你没有做任何“错误”。也许问面试官他们的问题是什么:)
  • 我的猜测是,他脑子里有一个自认为好的答案——虽然不是那么好。
  • @MDAAQIBJAWED 例如一个包含表情符号的字符串。
  • @MDAAQIBJAWED "Easy: ????"

标签: javascript


【解决方案1】:

可能是面试官希望你处理nullundefinedblank 字符串

如果没有这个检查,你的代码可能会抛出这个异常

无法读取未定义的属性“拆分”

使用这个:

if( str) {
str.split('').reverse().join('')
}

如果值不是,则评估为真:

  • 未定义
  • NaN
  • 空字符串(“”)
  • 0

或者更具体地说:

if( str && (typeof str == 'string') ) {
   // do something
}

请参阅此SO post 了解更多详情。

【讨论】:

  • 最好显式测试字符串:if(typeof str == 'string')。否则,如果值是对象、数字等,则会抛出错误。
  • 这将更准确地同意:) 但是这对于合理的值来说效果很好。
【解决方案2】:

您的面试官可能对您的回答不满意有两种可能的方式。

  1. 根据我的经验,当面试官要求你反转一个字符串时,你不应该使用现有的函数。您应该从头开始实施它。在您的情况下,一个不错的方法是使用递归来解决问题。 Look at this link!

  2. 性能问题!使用 reverse 函数并不是反转字符串的最快方法。 Check this out!

希望这能解决您的问题:)

【讨论】:

  • 这样一个函数的递归?我很确定这不是面试官想要的。
  • 是的,递归。这是一个非常常见的面试问题,面试官希望你对这类问题使用递归。这将是 O(log n)。
  • 如果面试官明确要求递归,那么可能,但即使这样我也会怀疑,问为什么要使用递归函数。如果我没有明确要求用递归或不常见的创造性方式解决这个问题,我肯定会对这个任务的递归解决方案感到震惊。
  • 是的,我知道你来自哪里。但根据我的经验,字符串反转的“最佳答案”是使用递归。
【解决方案3】:

本文处理 JavaScript 中的 unicode 符号:JavaScript has a Unicode problem · Mathias Bynens

解决您的问题的最佳方法是使用Array.from 方法,该方法适用于除 Internet Explorer 之外的所有浏览器(MDN 对此有一个 polyfill)。

这是基于文章答案的解决方案来反转字符串:

function strReverse(str) {
  //Only allow numbers and strings to pass, else return empty string
  if (typeof str != 'string' && typeof str != 'number') {
    return '';
  }
  //Return the reversed string
  return Array.from(str.toString()).reverse().join('');
}
//TESTS
console.log([
  strReverse(),
  strReverse(null),
  strReverse("null"),
  strReverse(true),
  strReverse("▼ ▼▲ ▼"),
  strReverse(1138),
  strReverse('?'),
  strReverse('f?ff?'),
]);

【讨论】:

    【解决方案4】:

    在 ECMAScript 6 中,您可以像下面这样反转字符串

    var string = "hello";
    var str = [...string].reverse().join('');
    console.log(str);
    

    【讨论】:

      【解决方案5】:

      当我在 10 标准时,我们的计算机老师总是要求每个学生编写代码来检查给定的字符串是否为回文。

      回文串是一个总是与其反向前相同的字符串:mom = mom

      在面试中,如果有人要求您编写代码来反转字符串。然后他想看看你解决问题的逻辑方法。任何编程语言中的现有函数也都有代码,它们实际上采用了一种逻辑方法并解决了问题。

      java中的逆向代码

      import java.util.*;
      
      class Reverse
      {
        public static void main(String args[])
      {
         String original, reverse = "";
         Scanner in = new Scanner(System.in);
         System.out.println("Enter a string to get reverse");
         original = in.nextLine();
         int length = original.length();
         for ( int i = length - 1; i >= 0; i-- )
           reverse = reverse + original.charAt(i);
       }
      }
      

      【讨论】:

        【解决方案6】:
        String words[] = str.split("\\s");
            String rev = "";
            for (String w : words) {
                StringBuilder sb = new StringBuilder(w);
                sb.reverse();
                rev += sb.toString() + " ";
            }
            System.out.println("\n reverse string=" + rev);
        

        【讨论】:

        • 这可能是正确的,但它在java 中,而问题是关于 javascript 不幸的是。
        • 哦,是的!我没有注意到你需要 javascript..让我尝试一下,回来。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-10
        相关资源
        最近更新 更多