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
检查之间的差异。