繁体   English   中英

在函数内按字符串长度对数组进行排序

[英]Sort an array by string length within a function

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

//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"]); 

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

您可以尝试以下方法:

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

看起来像这样吗? 如果为sortByLength输出设置一些变量,对吗?

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

是的,只要返回数组即可。 但是当排序对传递的数组进行排序时,最好使用.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),
    []
);

是的,丑陋的东西起作用 ;)

您实际上并没有返回值,而只需要在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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM