簡體   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