2017-10-12 62 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); 
相关问题