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

时间:2017-10-12 18:50:06

标签: javascript arrays function sorting

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

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

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

5 个答案:

答案 0 :(得分:2)

你可以试试这个:

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

答案 1 :(得分:0)

看起来这样吗?如果你将一些变量设置为sortByLength输出是不是正确?

答案 2 :(得分:0)

sortByLength功能中,您没有返回任何内容,因此未定义。考虑在return

之前加array.sort()

答案 3 :(得分:0)

是的,只需返回数组。但是,当排序对传递的数组进行排序时,最好使用 .slice 进行复制。归结为箭头func:

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 :(得分:0)

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