【问题标题】:How can get all objects whose sub object's property matches my string array using linq.js?如何使用 linq.js 获取其子对象的属性与我的字符串数组匹配的所有对象?
【发布时间】:2014-07-03 03:28:03
【问题描述】:

我有一个标签名称数组:

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

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

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

我怎样才能用 linq Js 做到这一点? IE 在这种情况下,两个项目都将被退回

【问题讨论】:

    标签: javascript linq linq.js


    【解决方案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();
    

    【讨论】:

    • 非常非常好,非常新鲜。谢谢!明天试试。
    • 顺便说一句,您应该检查 lodash(或下划线) - 我喜欢 C# 世界中的 linq,但 lodash 在 javascript 世界中更加简洁。以下是你如何在 lodash 中做同样的事情(对于格式化道歉): var matches = _.filter(items, function(item) { return _.find(item.tags, function(itemTag) { return _.contains(tags , itemTag.name); }) });
    【解决方案2】:

    这应该对你有用:-

    物品

    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);
    })
    

    【讨论】:

    • 谢谢你,给你点赞。是的,我可以使用过滤器或使用嵌套循环来做到这一点。不过,我想尝试使用 Linq.js。我只是认为解决方案会更简洁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多