如何基于布尔道具和名称道具对数组进行排序?

时间:2016-08-16 06:41:04

标签: javascript arrays

我有一个对象数组,如下所示:

[
  {
    name: s1,
    isDefault: false
  },
  {
    name: s2,
    isDefault: true
  },
  {
    name: s3,
    isDefault: false
  }
]

我想对这个数组进行排序,以便首先放置isDefault: true元素,然后按字母顺序依次跟随此对象。

换句话说:

[
  {
    name: s2,
    isDefault: true
  },
  {
    name: s1,
    isDefault: false
  },
  {
    name: s3,
    isDefault: false
  }
]

我知道如何完成第一个条件:

objPanoramas.sort((a, b) => {
  return a.isDefault < b.isDefault
})

如何整合第二个条件?

3 个答案:

答案 0 :(得分:2)

objPanoramas.sort((a, b) => {
  if (a.isDefault == b.isDefault) {
    name1 = a.name;
    name2 = b.name;
    return name1<name2?-1:(name1>name2?1:0)
  }
  return a.isDefault < b.isDefault
})

答案 1 :(得分:2)

试试这个

objPanoramas = [{
  name: "s1",
  isDefault: false
},{
  name: "s1",
  isDefault: true
}, {
  name: "s2",
  isDefault: true
}, {
  name: "s3",
  isDefault: false
}]


objPanoramas.sort((a, b) => {
  if ((a.isDefault && b.isDefault) || (!a.isDefault && !b.isDefault)) {
    return a.name.localeCompare(b.name)
  }else{
    return !a.isDefault
  }
})

console.log(objPanoramas);

答案 2 :(得分:1)

这非常符合您的需求:

https://stackoverflow.com/a/4576720/6482090

正如您在本文中所看到的,解决方案是检查sort()中的两个值。

查看该帖子上的示例!