使用其他数组中的值对对象数组进行排序

时间:2015-05-10 13:18:04

标签: javascript arrays sorting

我有两个数组,两个对象。

慈善机构(无序):

[{
    "_id": "5527c2b29a4c7ebe2953129d",
    "name": "Lorem ipsum",
    "number": 1,
    "metric": "Lorem ipsum",
    "metricConversion": 6,
    "logo": "http://api.fake.net/example.png",
    "country": "Albania",
    "twitter": "exampletwitter",
    "facebook": "examplefb"
}, ...]

促销:

[{
    "type": 1,
    "charity": "5527c2b29a4c7ebe2953129d",
    "start": Sun May 10 2015 14:11:32 GMT+0100 (BST),
    "end": Thu Jul 02 2009 00:00:00 GMT+0100 (BST),
    "priority": 10
}, ...]

促销数组按优先级排序(最大的优先顺序)。

我想要做的是通过促销数组订购慈善机构数组,因此优先级最高的慈善机构首先放置等(连接为_idcharity

我可以想到几种简单的方法来做到这一点,但是想到的那些效率非常低。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

创建一个慈善ID为关键字,索引(或优先级)为值的地图:

var map = {};
for (var i = 0; i < promotions.length; i++) {
  map[promotions[i].charity] = i;
}

现在您可以对慈善机构进行排序并使用地图来确定它们的排序:

charities.sort(function(a, b){
  return map[a._id] - map[b._id];
});