【问题标题】:How can I return the message "this is empty" from a function when the input is an empty array?当输入为空数组时,如何从函数返回消息“这是空的”?
【发布时间】:2020-11-08 03:48:22
【问题描述】:

我在 javascript 中编写了一个函数,用于查找数组中的最短字符串。当输入为空数组时,我希望函数返回空数组。我怎样才能做到这一点 ?这是我的代码:

function tinyFriend(array) {
    var tiny = array[0];
  
    for (i = 0; i < array.length; i++) { 
      if (array[i].length < tiny.length) {
         tiny = array[i];
      } 
    }
    
    return tiny;
}

【问题讨论】:

  • 函数内部检查是否array.length === 0 return [];
  • 其实这个函数是用来返回数组中最短的字符串。我想要的是当我给一个空数组作为输入时,它应该返回一个空数组。我应该为此设置什么条件?
  • 我刚刚回答了@FIDAH
  • 您做了哪些研究来确定如何确定数组是否为空?见How much research effort is expected of Stack Overflow users?
  • 在我写这篇文章时,你有两个相似的答案。两者都复制了您的 for 循环,由于您将 tiny 设置为 array[0],因此应该以 1 开头:for(var i=1; i&lt;array.length; i++) {

标签: javascript arrays string function if-statement


【解决方案1】:

在函数开始时检查数组的长度是否为0,否则返回数组,找到最短的元素并返回

function tinyFriend(array) {

  if(array.length===0)
    return array;
  else{
     var tiny = array[0];
  
    for (i = 1; i < array.length; i++) { 
      if (array[i].length < tiny.length) {
         tiny = array[i];
      } 
    }
    
    return tiny;
   }
}

console.log(tinyFriend(["test","testing","tester"]))
console.log(tinyFriend([]))

【讨论】:

    【解决方案2】:

    试试这个(注意return []后面不需要else

    function tinyFriend(array) {
      if (array.length === 0) {
        return []
      }
    
      var tiny = array[0];
    
      for (i = 0; i < array.length; i++) {
        if (array[i].length < tiny.length) {
          tiny = array[i];
        }
      }
    
      return tiny;
    }
    
    console.log(tinyFriend(['aa', 'bbb', 'c', 'dddd']))

    使用 ES6:

    const shortTinyFriend = array => 
      array.length > 0
       ? array.sort((a,b) => a.length - b.length)[0]
       : []
    
    console.log(shortTinyFriend(['aa', 'bbb', 'c', 'dddd']))
    console.log(shortTinyFriend([]))

    【讨论】:

    • 在“非ES6”中你也可以给数组一个默认值(空)。
    • @iAmOren 你的意思是return tiny || []?是的,但是即使array.length 等于0,所有函数体代码也会被执行。
    • 没有。我的意思是:function tinyFriend(array=[]) {
    • @iAmOren 为什么不呢,但是默认参数是 ES6 的特性,不会影响返回值。
    • 谢谢!我不知道。
    【解决方案3】:

    你应该在函数的开头检查输入数组是否为空,如下所示:

    if (array.length ===0 ) {
        return array; 
        }
        else {
         for (i = 0; i < array.length; i++) {
            if (array[i].length < tiny.length) {
            tiny = array[i];
          } 
      }
     return tiny; 
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      相关资源
      最近更新 更多