Во-первых, для заказа по names
вы можете использовать localeCompare () .Во-вторых, в массиве facilities
нет свойства entityType
, но вы пытаетесь получить к нему доступ.Теперь одно из решений - сначала использовать Array.map () , чтобы получить новый массив, в котором массив facilities
упорядочен по свойству limit
, затем вы можете отсортировать новый массив, возвращаемый map()
сначала names
, а затем entityType
, что-то вроде этого:
const input = [{name:"zBroomsticks PTY",id:34098365,entityType:"personal",facilities:[{type:"Home loan",account:"032654 987465",existing:true,modified:"04/12/2018",limit:100000},{type:"Credt card",account:"032654 987465",existing:false,modified:"04/12/2018",limit:200000},{type:"Credt card",account:"032654 987465",existing:false,modified:"04/12/2018",limit:10000},{type:"Credt card",account:"032654 987465",existing:false,modified:"04/12/2018",limit:10000}]},{name:"Mr John Doe -3409865, Mrs Jane Doe -34098365",id:34098365,entityType:"business",facilities:[{type:"Overdraft",account:"032654 987465",existing:false,modified:"04/12/2018",limit:10000}]},{name:"Mr Jack",id:34098365,entityType:"mixed",facilities:[{type:"Overdraft",account:"032654 987465",existing:false,modified:"04/12/2018",limit:10000}]},{name:"Mr Jack",id:34098365,entityType:"personal",facilities:[{type:"Overdraft",account:"032654 987465",existing:false,modified:"04/12/2018",limit:10000}]}];
let order = {
entityType: {personal:1, business:2, mixed:3}
};
function sortData(entities)
{
let limitOrder = entities.map(e =>
{
e.facilities.sort((a, b) => b.limit - a.limit);
return e;
});
return limitOrder.sort((a, b) =>
{
return a.name.localeCompare(b.name) ||
order.entityType[a.entityType] - order.entityType[b.entityType];
});
}
console.log(sortData(input));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Обратите внимание, я продублировал объект, связанный с name: "Mr Jack"
, используя другой entityType
, чтобы вы могли видеть, как работает алгоритм, когда есть два объекта сравняется names
.