按字母顺序对对象数组进行排序并将空值移至末尾

我正在尝试按升序对数组进行排序lname,并将空值移至末尾。


我能够按升序排序,但如何将空值移到最后?


let arr = [{

  name: 'z',

  lname: 'first'

}, {

  name: 'y',

  lname: ''

}, {

  name: 'a',

  lname: 'third'

}]


const copy = [...arr];


copy.sort((a, b) => (a.lname > b.lname ? 1 : -1))


console.log(copy);

console.log(arr)


慕尼黑的夜晚无繁华
浏览 110回答 1
1回答

湖上湖

您可以为字符串为空时添加单独的表达式:copy.sort((a, b)=> !a.lname - !b.lname || a.lname.localeCompare(b.lname));请注意,在字符串中(仅)空字符串是假的,因此!在这种情况下应用它会给出真。减去两个布尔值会将这些值变成 0(表示假)和 1(表示真)。* !a.lname - !b.lname only 为空时为负数b.lname。only 为空时为正a.lname。在所有其他情况下,将使用 进行比较localeCompare。* TypeScript 抱怨这种类型不匹配;在这种情况下,使用一元加运算符将布尔值显式转换为数字:+!a.lname - +!b.name
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript