每次以不同的顺序排序数组中的三个项目

时间:2017-06-27 08:22:18

标签: javascript arrays ecmascript-6

我有一个包含nametype的对象的数组。

我试图总是对数组进行排序,以便对象按类型排序为homedrawaway

其中一个数组的示例如下所示。阵列从后端发送,每次都以不同的顺序发送。每次的名字也不同。

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;
});

3 个答案:

答案 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);