对由数字组成的数组进行排序,但可以包含字符串
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));
我遇到了一个问题,我从 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));