如何在JavaScript中对关联对象数组进行排序?

时间:2015-07-22 12:38:40

标签: javascript sorting

我们正在开展Mario Kart锦标赛,我想尝试使用基本的JavaScript记录结果。

以下是代码:https://jsbin.com/hafati/44/edit?js,console

我差不多到了那里,但我需要帮助整理结果。

以下是数据的console.log

[object Object] {
  1: [object Object] {
    id: 1,
    name: "Player 1",
    total: 20
  },
  2: [object Object] {
    id: 2,
    name: "Player 2",
    total: 60
  },
  3: [object Object] {
    id: 3,
    name: "Player 3",
    total: 80
  },
  4: [object Object] {
    id: 4,
    name: "Player 4",
    total: 400
  },
  5: [object Object] {
    id: 5,
    name: "Player 5",
    total: 150
  },
  6: [object Object] {
    id: 6,
    name: "Player 6",
    total: 50
  }
}

你如何对这些球员进行排序,首先total最高?

3 个答案:

答案 0 :(得分:3)

JavaScript数组函数是多态的,所以你可以在"数组中使用它们"对象就好了:

var obj = { 0 :  {total: 3}, 1 : {total: 1}, 2 : {total: 5}}; // your object
obj.length = 2; // need to set this manually.

var sorted = [].sort.call(obj, function(x,y){ return x.total - y.total; });

也就是说,最好将顺序数据存储在像阵列这样的顺序数据结构中 - 所以尽管这样做起来并不是最好的主意。我假设你没有选择:)

答案 1 :(得分:1)

您需要将数据存储在对象数组中,这将比对象更容易迭代数组,并且还确保元素的顺序。然后,您可以使用数组sort函数对数组元素进行排序。

Demo



var myArr = [{
  id: 1,
  name: "Player 1",
  total: 20
}, {
  id: 2,
  name: "Player 2",
  total: 60
}, {
  id: 3,
  name: "Player 3",
  total: 80
}, {
  id: 4,
  name: "Player 4",
  total: 400
}, {
  id: 5,
  name: "Player 5",
  total: 150
}, {
  id: 6,
  name: "Player 6",
  total: 50
}];


myArr.sort(function(a, b) {
  return a.total < b.total;
});
console.log(myArr);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

将它们放在一个数组中:

var score = [{
    id: 1,
    name: "Player 1",
    total: 20
  },{
    id: 2,
    name: "Player 2",
    total: 60
  },
  ...
}];

然后使用Array.sort()

score.sort(function (a, b) {
   return a.total < b.total;
});