自定义排序数组,以基于字符串命令对象 - Javascript

时间:2018-01-30 09:07:31

标签: javascript arrays sorting

我有一个数组,我想根据我对象上的值进行排序。

我的数组看起来像这样:

[
  {
   "name": "Ricard Blidstrand",
   "number": "5",
   "position": "b"
  },
  {
   "name": "Gustaf Thorell",
   "number": "12",
   "position": "fw"
  },
  {
   "name": "Rasmus Bengtsson",
   "number": "13",
   "position": "mv"
  }
]

我想按此顺序按位置键订购:

mv> b> FW

我是否需要写出来,或者我错了?

if(a === "b" && b === "b") {
 return 0;
} else if (a === "b" && b === "mv") {
 return 1;
} 

2 个答案:

答案 0 :(得分:4)

您需要先指定优先级数组。

var priority = [ "mv", "b", "fw"];

现在基于此对数组进行排序

arr.sort( ( a, b ) => priority.indexOf( a.position ) - priority.indexOf( b.position ) );

<强>演示

&#13;
&#13;
var arr = [{
    "name": "Ricard Blidstrand",
    "number": "5",
    "position": "b"
  },
  {
    "name": "Gustaf Thorell",
    "number": "12",
    "position": "fw"
  },
  {
    "name": "Rasmus Bengtsson",
    "number": "13",
    "position": "mv"
  }
];

var priority = [ "mv", "b", "fw"];

arr.sort( ( a, b ) => priority.indexOf( a.position ) - priority.indexOf( b.position ) );

console.log(arr);     
&#13;
&#13;
&#13;

答案 1 :(得分:2)

创建订单对象,并为每个位置指定一个值。通过对象的位置从对象获取订单值进行排序:

&#13;
&#13;
var arr = [{"name":"Ricard Blidstrand","number":"5","position":"b"},{"name":"Gustaf Thorell","number":"12","position":"fw"},{"name":"Rasmus Bengtsson","number":"13","position":"mv"}]

var order = { mv: 0, b: 1, fw: 2 }

arr.sort(function(a, b) {
  return order[a.position] - order[b.position]
})

console.log(arr)
&#13;
&#13;
&#13;