2016-08-16 56 views
-2

我一直在寻找这一点,并不能完全弄清楚如何字(或只是找不到),我所期待的怎么办。我有两个JavaScript对象数组。一个请求集合中充满了ID,另一个包含一个基本上是这些ID所代表的字典的数组。我想通过位于字典数组内的description_text对请求数组进行排序。我试图只在请求数组内存放ID,而不是在每个数组中重复1000次,并且正在寻找最快的方法来完成此操作。您使用ORDERBY数组作为字典

例子:

 $scope.requests = [ 
        { request_id 1, request_division_id: 1, morefeilds...}, 
        { request_id 2, request_division_id: 3, morefeilds...}, 
        { request_id 3, request_division_id: 1, morefeilds...}, 
        { request_id 4, request_division_id: 2, morefeilds...}, 
        { request_id 5, request_division_id: 4, morefeilds...}]; 
     $scope.divDict = [ 
      {request_division_id: 1, desc_text: 'Sahara Square'}, 
      {request_division_id: 2, desc_text: 'Little Rodentia'}, 
      {request_division_id: 3, desc_text: 'Rainforest District'}, 
      {request_division_id: 4, desc_text: 'Tundratown'},] 

因此,在这种情况下,我需要在此为了回报排序排序依据:

 $scope.requests = [ 
        { request_id 4, request_division_id: 2, morefeilds...}, 
        { request_id 2, request_division_id: 3, morefeilds...}, 
        { request_id 1, request_division_id: 1, morefeilds...}, 
        { request_id 3, request_division_id: 1, morefeilds...}, 
        { request_id 5, request_division_id: 4, morefeilds...}]; 

由于是根据每个ID的desc_text的字母顺序排列。

+0

([通过在JavaScript字符串属性值排序对象数组]的可能的复制http://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value-in-javascript ) – vlaz

+0

不,这不是重复的问题。我正在比较字典,这个问题已经有了对象数组内的属性。我试图避免这种情况。 – ModestMonk

+0

让我分析一下。我的问题被标记为脱离主题,因为我问如何基于另一个数组的顺序对数组进行排序。这是主题?感谢plalx花时间解释它。我甚至放了一个Zootopia的参考,希望不被打扰,这么多。堆栈溢出社区既友善又粗鲁。 – ModestMonk

回答

0

这与排序并无太大差别,就像请求容纳了desc_text属性:不是从数组中的对象解析描述,而是从divDict对象映射中解析它。

$scope.requests = $scope.requests.sort(function (req1, req2) { 
    let desc1 = $scope.divDict[req1.request_id].desc_text, 
     desc2 = $scope.divDict[req2.request_id].desc_text; 

    return desc1 < desc2? -1 : +(desc1 > desc2); 
}); 

编辑:

我没有仔细阅读代码,并预计divDict是一个对象映射,其中键将请求ID,但我认为你还是会得到的想法。

+0

谢谢。不知道为什么我不能这样想。 如果request_id和desc_text可能是动态的或任何一个字段,我将如何去排序? – ModestMonk

+0

我不确定我是否理解你的问题。如果你不知道你想要比较的属性的名字,那么你可以做的最好的做法是循环遍历键并比较类似的键或类似的东西。 – plalx

+0

所以如果传递一个值,让我们调用它idPassedFromNgClick你的代码将是scope.divDict [req1.request_id] [idPassedFromNgClick]?另外,你为什么引用request_id,不应该是别的,因为字典没有这个属性。 – ModestMonk