Как получить все объекты, чьи свойства подобъекта соответствуют моему строковому массиву, используя 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);
})