87,922
社区成员
发帖
与我相关
我的任务
分享
//不考虑特殊情况的处理
const arrsort = arr => {
arr.sort((a, b) => { //用sort方法,分别针对两个参数元素都是数组的情况,一方是数组的情况,和双方都不是数组的情况给出相应的比较结果返回值
return Array.isArray(a) && Array.isArray(b) ? //两个都是数组的情况
(a.length>0 && b.length>0 ? a[0]-b[0] : (a.length>0 ? 1 : (b.length>0 ? -1 : 0)))
: Array.isArray(a) ? (a.length>0 ? a[0]-b : -1) //a是数组的情况
: Array.isArray(b) ? (b.length>0 ? a-b[0] : 1) //b是数组的情况
: a-b; //都不是数组的情况
});
return arr;
};
console.log(arrsort([2, [4, 6], 3, 9]));
console.log(arrsort([5, [6], [2], 20]));
//考虑特殊情况的处理
const arrsort2 = arr => {
arr.sort((a, b) => { //思路和上面相同
if (Array.isArray(a)) a = arrsort2(a); //只是多了把元素是数组的情况,先把元素自己本身排序(递归方式)
if (Array.isArray(b)) b = arrsort2(b);
return Array.isArray(a) && Array.isArray(b) ?
(a.length>0 && b.length>0 ? a[0]-b[0] : (a.length>0 ? 1 : (b.length>0 ? -1 : 0)))
: Array.isArray(a) ? (a.length>0 ? a[0]-b : -1)
: Array.isArray(b) ? (b.length>0 ? a-b[0] : 1)
: a-b;
});
return arr;
};
console.log(arrsort2([5, [6, 4], 3, 9]));
[/quote]您好,
我理解的有问题,有点绕,能否把里面的三元运算符拆分为 if 语句。
非常感谢!const arrsort = arr => {
arr.sort((a, b) => {
if (Array.isArray(a) && Array.isArray(b) ) { //两个都是数组的情况
if (a.length>0 && b.length>0) { //a和b数组都不为空
return a[0]-b[0]; //比较第一个元素
} else if (a.length>0) { //a不为空,b位空
return 1; //则a大
} else if (b.length>0) { //a为空,b不为空
return -1; //则b大
} else { //两者都为空
return 0; //则相等
}
} else if (Array.isArray(a)) { //a是数组的情况
return (a.length>0 ? a[0]-b : -1); //这里之后的三目运算LZ就自己拆分为if吧
} else if (Array.isArray(b)) { //b是数组的情况
return (b.length>0 ? a-b[0] : 1)
} else { //都不是数组的情况
return a-b;
}
});
return arr;
};
console.log(arrsort([2, [4, 6], 3, 9]));
console.log(arrsort([5, [6], [2], 20]));
//不考虑特殊情况的处理
const arrsort = arr => {
arr.sort((a, b) => { //用sort方法,分别针对两个参数元素都是数组的情况,一方是数组的情况,和双方都不是数组的情况给出相应的比较结果返回值
return Array.isArray(a) && Array.isArray(b) ? //两个都是数组的情况
(a.length>0 && b.length>0 ? a[0]-b[0] : (a.length>0 ? 1 : (b.length>0 ? -1 : 0)))
: Array.isArray(a) ? (a.length>0 ? a[0]-b : -1) //a是数组的情况
: Array.isArray(b) ? (b.length>0 ? a-b[0] : 1) //b是数组的情况
: a-b; //都不是数组的情况
});
return arr;
};
console.log(arrsort([2, [4, 6], 3, 9]));
console.log(arrsort([5, [6], [2], 20]));
//考虑特殊情况的处理
const arrsort2 = arr => {
arr.sort((a, b) => { //思路和上面相同
if (Array.isArray(a)) a = arrsort2(a); //只是多了把元素是数组的情况,先把元素自己本身排序(递归方式)
if (Array.isArray(b)) b = arrsort2(b);
return Array.isArray(a) && Array.isArray(b) ?
(a.length>0 && b.length>0 ? a[0]-b[0] : (a.length>0 ? 1 : (b.length>0 ? -1 : 0)))
: Array.isArray(a) ? (a.length>0 ? a[0]-b : -1)
: Array.isArray(b) ? (b.length>0 ? a-b[0] : 1)
: a-b;
});
return arr;
};
console.log(arrsort2([5, [6, 4], 3, 9]));