Javascript 对象属性中没有值时的数组排序

Javascript 对象属性中没有值时的数组排序,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我有以下数组 [ { "id": 1, "name": "Ruan Duarte", "idade": 11, "work": { "id": 2 } }, { "id": 2, "name": "Raul Dias", "

我有以下数组

[
  {
    "id": 1,
    "name": "Ruan Duarte",
    "idade": 11,
    "work": {
      "id": 2
    }
  },
  {
    "id": 2,
    "name": "Raul Dias",
    "idade": 13
  },
  {
    "id": 7,
    "name": "Caio",
    "idade": 60,
    "work": {
      "id": 4
    }
  },
  {
    "id": 3,
    "name": "Felipe Lima",
    "idade": 55
  },
  {
    "id": 4,
    "name": "Camila",
    "idade": 25,
    "work": {
      "id": 3
    }
  }
]
我有一个这种格式的数组,其中某些角落的work.id字段为空。 我试着按如下方式订购

array.sort((a, b) => {
  return (
    a.work.id - b.work.id
  )
})
但是,由于id不存在,我得到了一个错误,这可能会有所帮助

array.sort((a, b) => {
  return (
      (a.work != null ? a.work.id : -Infinity) - (b.work != null ? b.work.id : -Infinity) 
  )
});
您可以使用属性和参数获取默认值,默认值为零

通过将其作为默认值,所有缺少嵌套对象的对象将被排序到底部

const
数据=[{id:1,姓名:“阮·杜阿尔特”,idade:11,作品:{id:2},{id:2,姓名:“劳尔·迪亚斯”,idade:13},{id:7,姓名:“凯奥”,idade:60,作品:{id:4},{id:3,姓名:“菲利佩·利马”,idade:55},{id:4,姓名:“卡米拉”,idade:25,作品:{id:3}];
data.sort((a,b)=>(a?work?id?Number.MAX_值)-(b?work?id?Number.MAX_值));
控制台日志(数据)

.as控制台包装{max height:100%!important;top:0;}
如果需要按
工作.id进行排序,请执行以下操作:

const arr=[
{
“id”:1,
“姓名”:“阮·杜阿尔特”,
“idade”:11,
“工作”:{
“id”:2
}
},
{
“id”:2,
“姓名”:“劳尔·迪亚斯”,
“idade”:13
},
{
“id”:7,
“名称”:“Caio”,
“idade”:60,
“工作”:{
“id”:4
}
},
{
“id”:3,
“姓名”:“菲利佩·利马”,
“idade”:55
},
{
“id”:4,
“姓名”:“卡米拉”,
“idade”:25,
“工作”:{
“id”:3
}
}
]
arr.sort((a,b)=>{
如果(a.工作和b.工作){
返回a.work.id>b.work.id?1:-1
}如果(!a.work&&!b.work){
返回a.id>b.id?1:-1
}否则,如果(!a.工作){
返回1
}否则{
返回-1
}
})
输出:

[
{
“id”:1,
“姓名”:“阮·杜阿尔特”,
“idade”:11,
“工作”:{
“id”:2
}
},
{
“id”:4,
“姓名”:“卡米拉”,
“idade”:25,
“工作”:{
“id”:3
}
},
{
“id”:7,
“名称”:“Caio”,
“idade”:60,
“工作”:{
“id”:4
}
},
{
“id”:2,
“姓名”:“劳尔·迪亚斯”,
“idade”:13
},
{
“id”:3,
“姓名”:“菲利佩·利马”,
“idade”:55
}
]

如果没有,会发生什么?这是否回答了您的问题?没有工作ID的项目在排序顺序中应该在哪里?您可以测试它们是否存在,如果不存在,请使用
Number.MAX\u VALUE
使它们排序在
Number.MIN\u VALUE
的所有其他值之后。或者使用第二个属性作为二级排序。您的问题是(a)如何检查属性的存在,(b)如果属性不存在,如何排序(在这种情况下,由您决定——缺少的属性是比现有属性“大”还是“小”),还是(c)其他问题?