这个简单的js代码有什么问题?

时间:2018-12-14 21:15:45

标签: javascript loops

我想知道这个简单的代码是什么问题。我正在做一个函数,需要获取字符串中最短单词的长度。我知道我可以在任何地方找到此功能,

为什么我的不工作?

function findShort(s){
    var arr = s.split(" ");
    var out = 1000;
    for (var i = 0; i < arr.length-1; i++){
          if (arr[i] <= out){
              out = arr[i].length;
          }
    }
    return out;
}

以上函数返回1000。

3 个答案:

答案 0 :(得分:4)

您需要比较每个单词(arr[i].length)的长度,而不是每个单词本身(arr[i])的长度与到目前为止的最短长度。

function findShort(s){
    var arr = s.split(" ");
    var out = 1000;
    for (var i = 0; i < arr.length-1; i++){
          if (arr[i].length <= out){ // <-- here!
              out = arr[i].length;
          }
    }
    return out;
}

答案 1 :(得分:1)

您的问题是,当您在javascript中比较字符串时,它不使用它的长度。您必须使用字符串的“ length”属性,如下面的固定代码中所示。另外,您必须保存结果以提供输出

function findShort(s){
    var arr = s.split(" ");
    var comp = 1000;
    var out = "";
    for (var i = 0; i < arr.length-1; i++){
          if (arr[i].length <= comp){
              comp = arr[i].length;
              out = arr[i];
          }
    }
    return out;
}

如果您要返回一个包含所有最短单词(相同长度)的数组,仍然存在问题。您可以添加另一个if语句,并使其长度相同时将其添加到数组中,并在找到较短的单词时将其清除。

答案 2 :(得分:-2)

尝试一下。

    function findShort(){
        s = "sample test try";
        var arr = s.split(" ");
        var out = 1000;
        for (var i = 0; i < arr.length; i++){
            if (arr[i].length <= out){
                out = arr[i].length;
            }
        }
        return out;
    }
    alert(findShort());