如何使用linq.js将字符串数组与对象数组进行比较

时间:2015-08-20 18:08:43

标签: javascript arrays angularjs linq.js

我需要将一个字符串数组的id与一个对象数组进行比较。我需要将匹配id的对象返回到对象中。我需要使用linq.js而不知道如何做到这一点。

我需要比较的字符串数组:

selectedIds = ["080A8", "032A10", "025A10"]

数组我需要遍历并返回匹配的对象:

[
 {"id":"009B4",
     "supply":{
       "builder":[
             {"id":"3629",
              "name":"sample name",
              "color":"red"}
                 ]
             }
 },
 {"id":"00434",
     "supply":{
       "builder":[
             {"id":"34529",
              "name":"sample name two",
              "color":"black"}
                 ]
             }
   }
]

我需要匹配顶层的ID。

这是我想要开始的:

var selectedObjects = Enumerable.From(array).Where("m=>m.id == '" +  + "'").ToArray();

1 个答案:

答案 0 :(得分:2)

你不需要Linq.js或任何图书馆来实现你的目标。这是解决 O(n)时间问题的解决方案,其中 n 是最大数组的大小。

var selectedIds = ["080A8", "032A10", "025A10"];
var list = [
    {"id": "009B4",
        "supply": {
            "builder": [
                {"id": "3629",
                    "name": "sample name",
                    "color": "red"}
            ]
        }
    },
    {"id": "00434",
        "supply": {
            "builder": [
                {"id": "34529",
                    "name": "sample name two",
                    "color": "black"}
            ]
        }
    }
];

var idMap = selectedIds.reduce(function (map, id) {
    map[id] = true;
    return map;
}, {});

var selectedObjects = list.filter(function(item){
    return !!idMap[item.id];
});
相关问题