对由数字组成的数组进行排序,但可以包含字符串

Sorting an Array that consists of numbers, BUT can include strings

我遇到了一个问题,我从 API(主要是数字数组)中获取结果,但如果开发人员出错并将该字段留空,我将得到空字符串 ("")。 我正在尝试按升序对这个数组进行排序,并将空字符串移动到数组的后面,如下所示:

let arr = [3, 4, "", 1, 5, 2]   // Example Array from api

这个数组,修改后应该变成:

let res = [1, 2, 3, 4, 5, ""]

我尝试使用 arr.sort() 方法,但结果如下所示:

let res = ["",1 ,2 ,3 ,4 ,5]

出于某种原因,当元素是字符串时,sort 方法将它放在最前面,而不是像 undefined 或 null 那样放在最后。

方法一

let arr = [3, 4, "", 1, 5, 2];
const res = arr.sort((a, b) => {
    if (typeof a === 'string') {
        return 1;
    } else if (typeof b === 'string') {
        return -1;
    } else {
        return a - b;
    }
}
);

console.log(res)

输出:

[ 1, 2, 3, 4, 5, '' ]

方法二

const res = (arr) => {
    let newArr = [];
    let strArr = [];
    for (let i = 0; i < arr.length; i++) {
        if (typeof arr[i] === 'string') {
            strArr.push(arr[i]);
        } else {
            newArr.push(arr[i]);
        }
    }
    return newArr.concat(strArr);
}

console.log(res(arr));