【问题标题】:Sort an array by string length within a function在函数中按字符串长度对数组进行排序
【发布时间】:2018-03-24 19:41:46
【问题描述】:

我有一个问题,希望我获取一个单词数组,然后以从最小到最大单词的数组形式返回它们。这必须在函数中完成。我有一个简单的形式,可以返回我想要的结果:

//arr = ["Beg", "Life", "I", "To"]
//arr.sort(function(a, b){
//  return a.length - b.length;
//});

但我需要将它放入一个函数中。到目前为止,这是我对该部分的了解:

function sortByLength (array) {
    array.sort(function(a, b){
       return a.length - b.length;
    });
}
sortByLength(["Telescopes", "Glasses", "Eyes", "Monocles"]); 

我不是在寻找答案。只是一些关于我做错了什么的建议。谢谢你的帮助!

【问题讨论】:

  • 你只需要在你的函数中添加一个return语句,让它返回排序后的数组:)

标签: javascript arrays function sorting


【解决方案1】:

在您的 sortByLength 函数中,您没有返回任何内容,因此它是未定义的。考虑将return 放在array.sort() 之前

【讨论】:

    【解决方案2】:

    你可以试试这个:

    function sortByLength (array) {
       return array.sort((x,y) => x.length - y.length);
    }
    

    【讨论】:

      【解决方案3】:

      是的,只是返回数组。但是由于排序对传递的数组进行排序,使用 .slice 来复制它可能会很好。归结为箭头函数:

      const sortByLength = arr => arr.slice().sort((a,b)=>a.length-b.length);
      

      或者,如果您想使用长度表更快(也许):

      const sortByLength = arr => 
        arr.reduce((table,s)=> ( 
          (table[s.length] || (table[s.length] = [])).push(s), table), 
          []
        ).reduce((result, tablerow) => 
          result.concat(tablerow),
          []
      );
      

      是的,那个丑陋的东西works ;)

      【讨论】:

        【解决方案4】:

        您实际上并没有返回您的值,您只需要在 sortByLength 函数中添加一个 return 语句:

        function sortByLength(array) {
          return array.sort(function(a, b) {
            return a.length - b.length;
          });
        }
        
        console.log(sortByLength(["Telescopes", "Glasses", "Eyes", "Monocles"]));

        编辑:如果不想修改原始数组,只需在函数中添加slice(),它就会返回一个新数组:

        function sortByLength(array) {
          return array.slice().sort(function(a, b) {
            return a.length - b.length;
          });
        }
        
        var arrayOne = ["Telescopes", "Glasses", "Eyes", "Monocles"];
        var arrayTwo = sortByLength(arrayOne);
        

        【讨论】:

          猜你喜欢
          • 2015-01-16
          • 1970-01-01
          • 2016-04-23
          • 1970-01-01
          • 2016-02-09
          • 2013-12-03
          • 2011-03-11
          • 2021-03-16
          • 2017-07-19
          相关资源
          最近更新 更多