你如何使用数组作为字典

时间:2016-08-16 19:38:23

标签: javascript

我一直在寻找这个,并且无法弄清楚如何说出(或者找不到)我正在寻找的东西。

我有两个javascript对象数组。一个具有完整ID的请求集合,另一个包含一个数组,该数组基本上是这些ID所代表的字典。我想通过一个存在于字典数组中的description_text来命令请求数组。我试图只在请求数组中存放ID,而不是在每个数组中重复1000次,并且正在寻找最快的方法来执行此操作。

示例:

        $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'},]

所以在这种情况下我需要orderby以这个顺序返回排序:

        $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的字母顺序。

1 个答案:

答案 0 :(得分: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,但我认为你仍然可以理解。