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)其他问题?