如何使用linq.js获取其子对象的属性与我的字符串数组匹配的所有对象?

时间:2014-07-03 03:28:04

标签: javascript linq linq.js

我有一系列标签名称:

var tags = [' tagOne',' tagTwo']

我想使用它来查询下面的数组并获取与标记匹配的所有项目。

var items = 
[
{
  'name': 'itemOne',
  'tags': [
    { name: 'tagOne' }
  ]
},
{
  'name': 'itemTwo',
  'tags': [
    { name: 'tagTwo' }
  ]
}
];

如何使用linq Js执行此操作? I.E在这种情况下,两件物品都将被退回

2 个答案:

答案 0 :(得分:1)

这应该适合你: -

项目

var items = 
[
{
  'name': 'itemOne',
  'tags': [
    { name: 'tagOne' }
  ]
},
{
  'name': 'itemTwo',
  'tags': [
    { name: 'tagTwo' }
  ]
},
{
  'name': 'itemThree',
  'tags': [
    { name: 'tagThree' }
  ]
}
];

标记: -

var tags = ['tagOne', 'tagTwo'];

搜索标签: -

var fillteredItems = items.filter(function(item){
    var tagsInItem = item["tags"];
    for (var i = 0; i < tags.length; i++) {
        for (var j = 0; j < tagsInItem.length; j++) {
            if(tags[i]==tagsInItem[j].name)
                return item;
        };
    };
});

打印结果: -

fillteredItems.forEach(function(item){
    console.log("items",item);
})

答案 1 :(得分:1)

试试这个;它可能不是最有效的方式(我之前从未使用过linq.js)但它会起作用:

// Enumerate through the items
var matches = Enumerable.From(items)
    .Where(function(item) {
        // Enumerate through the item's tags
        return Enumerable.From(item.tags).Any(function(tag) {

            // Find matching tags by name
            return Enumerable.From(tags).Contains(tag.name);
        })
    })
    .ToArray();