为什么这个排序函数返回undefined?

时间:2018-04-17 15:38:48

标签: javascript function sorting undefined

记录到控制台的结果( answer )是正确的结果,但它是从未定义的函数中出来的。发生了什么事?

let sorted = [];

function reset(){
    sorted = [];
}

function sort(list) {
    let least = list[0];
    for (let i = 0; i < list.length; i++){
        if (list[i] < least ){
            least = list[i];
        }
    }
    sorted.push(least);
    list.splice(list.indexOf(least),1);
    if (list[0] !== undefined){
        sort(list)
    }
    else {
        let answer = sorted;
        reset();
        console.log(answer);
        return answer;
    }
}
let sampleArray = [3,2,1];
sort(sampleArray);

2 个答案:

答案 0 :(得分:0)

if分支中,您正确地以递归方式调用sort,但只是忽略返回的值而不是返回它。回来吧,你应该没问题:

if (list[0] !== undefined) {
    return sort(list); // Here
}
else {
    // Rest of your code...

答案 1 :(得分:0)

@Mureinik关于这个问题是正确的。但是,更重要的是,如果您想按递增顺序制作数组的排序副本,则可以使用.slice().sort()轻松完成此操作:

let sampleArray = [3, 1, 2];
// sorted array
let sortedArray = sampleArray.slice().sort((a, b) => a - b);

console.log(sortedArray);
// original array preserved
console.log(sampleArray);

(我现在收到500错误here's an alternative demo