Javascript 按多个属性对数组中的对象排序(可能不存在)

Javascript 按多个属性对数组中的对象排序(可能不存在),javascript,Javascript,我正在尝试对该数组进行排序: [ { "id": 877234004, "name": "app.js", "type": "FILE", "parentId": 877234003 }, { "id": 877234010, "name": "project", "type": "DIRECTORY" }, { "id": 877234002, "name": "src", "type": "D

我正在尝试对该数组进行排序:

[
  {
    "id": 877234004,
    "name": "app.js",
    "type": "FILE",
    "parentId": 877234003
  },
  {
    "id": 877234010,
    "name": "project",
    "type": "DIRECTORY"
  },
  {
    "id": 877234002,
    "name": "src",
    "type": "DIRECTORY",
    "parentId": 877234010
  },
  {
    "id": 877234003,
    "name": "app",
    "type": "DIRECTORY",
    "parentId": 877234002
  }
]
如您所见,有些对象没有
父ID
。我需要把这个放在上面,其余的将按
id
排序

这是我的密码:

input.sort(function (a, b) {
    if (typeof a.parentId === 'undefined')) 
      return -1;
    else
      return a.id - b.id;
  });
但它不起作用。有可能这样做吗

预期结果:

[
  {
    "id": 877234010,
    "name": "project",
    "type": "DIRECTORY"
  },
  {
    "id": 877234002,
    "name": "src",
    "type": "DIRECTORY",
    "parentId": 877234010
  },
  {
    "id": 877234003,
    "name": "app",
    "type": "DIRECTORY",
    "parentId": 877234002
  },
  {
    "id": 877234004,
    "name": "app.js",
    "type": "FILE",
    "parentId": 877234003
  }
]
提前感谢

我建议使用js库

var-arr=[
{
“id”:877234004,
“名称”:“app.js”,
“类型”:“文件”,
“家长ID”:877234003
},
{
“id”:877234010,
“名称”:“项目”,
“类型”:“目录”
},
{
“id”:877234002,
“名称”:“src”,
“类型”:“目录”,
“家长ID”:877234010
},
{
“id”:877234003,
“名称”:“应用程序”,
“类型”:“目录”,
“家长ID”:877234002
}
];
var sortedArr=u.orderBy(arr,'parentId','desc');
控制台日志(分拣机)
我建议使用js库

var-arr=[
{
“id”:877234004,
“名称”:“app.js”,
“类型”:“文件”,
“家长ID”:877234003
},
{
“id”:877234010,
“名称”:“项目”,
“类型”:“目录”
},
{
“id”:877234002,
“名称”:“src”,
“类型”:“目录”,
“家长ID”:877234010
},
{
“id”:877234003,
“名称”:“应用程序”,
“类型”:“目录”,
“家长ID”:877234002
}
];
var sortedArr=u.orderBy(arr,'parentId','desc');
控制台日志(分拣机)

需要测试A和B并反转。如果A缺少道具使用-1如果B使用+1

让arr=[{
“id”:877234004,
“名称”:“app.js”,
“类型”:“文件”,
“家长ID”:877234003
},
{
“id”:877234010,
“名称”:“项目”,
“类型”:“目录”
},
{
“id”:877234002,
“名称”:“src”,
“类型”:“目录”,
“家长ID”:877234010
},
{
“id”:877234003,
“名称”:“应用程序”,
“类型”:“目录”,
“家长ID”:877234002
}
];
const sortPredicate=(a,b)=>{
if(a.hasOwnProperty('parentId')==false){
返回-1;
}else if(b.hasOwnProperty('parentId')==false){
返回1;
}否则{
返回a.id-b.id;
}
};

log(arr.sort(sortPredicate))需要测试A和B并反转。如果A缺少道具使用-1如果B使用+1

让arr=[{
“id”:877234004,
“名称”:“app.js”,
“类型”:“文件”,
“家长ID”:877234003
},
{
“id”:877234010,
“名称”:“项目”,
“类型”:“目录”
},
{
“id”:877234002,
“名称”:“src”,
“类型”:“目录”,
“家长ID”:877234010
},
{
“id”:877234003,
“名称”:“应用程序”,
“类型”:“目录”,
“家长ID”:877234002
}
];
const sortPredicate=(a,b)=>{
if(a.hasOwnProperty('parentId')==false){
返回-1;
}else if(b.hasOwnProperty('parentId')==false){
返回1;
}否则{
返回a.id-b.id;
}
};

log(arr.sort(sortPredicate))如果按降序排序,则预期结果中的家长ID将首先出现,然后是家长ID。请编辑您的问题。如果按降序排序,则预期结果中的
parentId
877234003将排在第一位,然后
parentId
877234003。请编辑您的问题。可能的优化是返回每个
hasOwnProperty
检查之间的差异。可能的优化是返回每个
hasOwnProperty
检查之间的差异。