Как отсортировать массив обьектов?
Есть массив объектов :
a = [
{
name: '2107',
id: '1',
sup: undefined,
},
{
name: '2',
id: '2',
sup: {
name: "name1"
}
},
{
name: '21',
id: '3',
sup: {
name: "name2"
}
}
]
Как отсортировать, так чтобы сначала были элементы, где sup не undefined, а потом уже равны undefined. Т.е. вот так:
а = [
{
name: '2',
id: '2',
sup: {
name: "name1"
}
},
{
name: '21',
id: '3',
sup: {
name: "name2"
}
},
{
name: '2107',
id: '1',
sup: undefined,
}
]
Пробовал вот так(не работает):
function sortBy(arr) {
return arr.sort((a, b) => a.sup != undefined ? 1 : -1);
}
sortBy(totalArr);
Ответы (2 шт):
Автор решения: DenDy
→ Ссылка
Сначалa сортируются ключи или ID, Затем создается новый массив согласно упорядоченности ключей.
Ниже пример сортировки по полю ID
var key = [];
var nArray = [];
var a = [{
name: '2107',
id: 3,
sup: 'undefined'
},
{
name: '2107',
id: 5,
sup: 'undefined'
},
{name: '2107',
id: 1,
sup: 'undefined'
},
];
a.forEach(function (item) {
key.push(item.id);
});
key.sort();
key.forEach(function (key) {
a.forEach(function (item) {
if (item.id == key) {
nArray.push(item);
}
});
});
console.info(nArray);
Автор решения: InDevX
→ Ссылка
let obj = [{
name: '2107',
id: '1',
sup: undefined,
},{
name: '2',
id: '2',
sup: {name:"name1"}
},{ name: '21',
id: '3',
sup: {name:"name2"}
}
];
Array.prototype.sortByField = function(field) {
return this.slice(0).sort(function(a,b) {
return (a[field] !== undefined) ? -1 : 1;
});
}
console.log(obj.sortByField('sup'));