Как получить все объекты, чьи свойства подобъекта соответствуют моему строковому массиву, используя linq.js?

У меня есть массив имен тегов:

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

Что я хочу использовать, чтобы запросить массив ниже и получить все элементы, которые соответствуют тегу.

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

Как я могу сделать это с linq Js? IE в этом случае оба элемента будут возвращены

2 ответа

Решение

Попробуй это; это может быть не самый эффективный способ (я никогда раньше не использовал 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();

Это должно работать для вас:

Предметы

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);
})
Другие вопросы по тегам