我有一个包含name
和type
的对象的数组。
我试图总是对数组进行排序,以便对象按类型排序为home
,draw
,away
。
其中一个数组的示例如下所示。阵列从后端发送,每次都以不同的顺序发送。每次的名字也不同。
var arr = [
{
type: 'home',
name: 'Liverpool Blues'
}, {
type: 'away',
name: 'Manchester Reds'
},
{
type: 'draw',
name: 'Draw'
}
];
我的代码看起来像这样。如果主页总是被推到前面,我认为绘制应该被排序到中间,并且总是被推到最后,尽管我认为我对排序数组的方式一定存在错误。
return [...selections].sort((a, b) => {
if (a.type === "HOME") return -1;
if (b.type === "AWAY") return 1;
return 0;
});
答案 0 :(得分:1)
您可以使用一个对象,该对象按所需顺序对type
属性进行组合。
var array = [{ type: 'home', name: 'Liverpool Blues' }, { type: 'away', name: 'Manchester Reds' }, { type: 'draw', name: 'Draw' }],
order = { home: 1, draw: 2, away: 3 };
array.sort(function (a, b) { return order[a.type] - order[b.type]; });
console.log(array);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)
您可以直接迭代并定位它们:
let arr = [];
selections.forEach(s => {
if (s.type === "HOME") arr[0] = s;
if (s.type === "DRAW") arr[1] = s;
if (s.type === "AWAY") arr[2] = s;
})
然后arr
将按照正确的顺序。
答案 2 :(得分:0)
您想要的顺序是反向字母(主页,绘图,离开),因此type
属性上的反向排序将执行:
var arr = [
{
type: 'home',
name: 'Liverpool Blues'
}, {
type: 'away',
name: 'Manchester Reds'
},
{
type: 'draw',
name: 'Draw'
}
];
arr.sort((a, b) => b.type.localeCompare(a.type));
console.log(arr);