2017-10-12 64 views
0

我有一個問題,需要我輸入一個單詞數組,並將它們從最小單詞返回到最大單詞。這必須在一個函數中完成。我有一個簡單的形式,它返回我想要的結果:按函數內的字符串長度對數組進行排序

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

我不是在尋找答案。只是一些建議,我做錯了什麼。謝謝你的幫助!

+4

你只需要添加一個返回語句到你的函數,以便它返回排序後的數組:) –

回答

0

看起來像這樣的作品?如果你設置了一些變量到sortByLength輸出是否正確?

0

在你的sortByLength函數中,你沒有返回任何東西,所以它沒有定義。考慮把一個return只是array.sort()

1

您可以嘗試在此之前:

function sortByLength (array) { 
    return array.sort((x,y) => x.length - y.length); 
} 
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

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); 
相關問題