使用Javascript ES5,基于标签数组返回JSON对象。 每个对象都有标签数组,我试图只返回与所有tag.name匹配的对象。
例如,如果基于所有标签名称(tags [0] .name,tags [1] .name,tags [2] .name)的过滤条件为['energy','video'],则返回对象应具有包含能源和视频的标签名称(它仍可以具有其他标签,如Featured)
tags: [
{
localizedTitle: null,
title: 'Featured',
name: 'featured'
},
{
localizedTitle: null,
title: 'Video',
name: 'video'
},
{
localizedTitle: null,
title: 'Energy',
name: 'energy'
}
]
使用Array.prototype.filter(),我能够返回与单个值匹配的对象-> tags [0] .name 但是,我需要基于所有标签名称-> tags [0] .name,标签[1] .name,标签[2] .name
返回对象我尝试使用Array.prototype.map()将所有标签名称组合到一个数组中-> Array(3)[“ featured”,“ video”,“ energy”]
并尝试使用Array.prototype.filter()返回基于新标签数组的对象,但除了Array []之外,它不返回任何对象
请在https://codepen.io/anon/pen/KjLKBR上查看测试代码
我希望
的输出返回对象{
title: 'Video Energy Featured',
tags: [
{
localizedTitle: null,
title: 'Featured',
name: 'featured'
},
{
localizedTitle: null,
title: 'Video',
name: 'video'
},
{
localizedTitle: null,
title: 'Energy',
name: 'energy'
}
]
}
非常感谢。非常感谢。
答案 0 :(得分:0)
使用filter
使您处在正确的轨道上。这是我对你的问题的看法。
function filterItems(items, tags) {
return items.filter(function(item) {
var itemTags = item.tags.map(function (tag) { return tag.name; });
return tags.every(function(tag) { return itemTags.indexOf(tag) > -1 });
})
}
使用要过滤的项目和tags
的列表来调用它。它返回过滤的列表。
这不是最理想的代码,但是应该可以完成工作。