1

我需要将一个字符串数组与一个对象数组进行比较。我需要将具有匹配 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();
4

1 回答 1

3

您不需要 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];
});
于 2015-08-20T19:07:28.887 回答