ES5javascript根据数组多key对象过滤JSON对象
ES5 javascript Filter JSON object based on array multiple key object
使用Javascript ES5,return JSON 基于标签数组的对象。
每个对象都有标签数组,我试图 return 仅匹配所有 tags.name.
的对象
例如基于所有标签名称(tags[0].name , tags[1].name , tags[2].name )的过滤条件为['energy', 'video'], return 对象应该有包含能量和视频的标签名称(它仍然可以有其他标签,如精选)
tags: [
{
localizedTitle: null,
title: 'Featured',
name: 'featured'
},
{
localizedTitle: null,
title: 'Video',
name: 'video'
},
{
localizedTitle: null,
title: 'Energy',
name: 'energy'
}
]
使用 Array.prototype.filter(),我能够 return 匹配单个值的对象 -> tags[0].name
但是,我需要 return 基于所有标签名称的对象 -> tags[0].name , tags[1].name , tags[2].name
我尝试使用 Array.prototype.map() 将所有标签名称组合到一个数组中 -> Array(3) [ "featured", "video", "energy" ]
并尝试使用 Array.prototype.filter() 到基于新标签数组的 return 对象,但它没有 return 除了数组 []
之外的任何对象
请在 https://codepen.io/anon/pen/KjLKBR
查看测试代码
我期望
的输出 return 对象
{
title: 'Video Energy Featured',
tags: [
{
localizedTitle: null,
title: 'Featured',
name: 'featured'
},
{
localizedTitle: null,
title: 'Video',
name: 'video'
},
{
localizedTitle: null,
title: 'Energy',
name: 'energy'
}
]
}
非常感谢。非常感谢。
您使用 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
的列表来调用它。它 returns 过滤列表。
这不是最佳代码,但它应该可以完成工作。
使用Javascript ES5,return JSON 基于标签数组的对象。 每个对象都有标签数组,我试图 return 仅匹配所有 tags.name.
的对象例如基于所有标签名称(tags[0].name , tags[1].name , tags[2].name )的过滤条件为['energy', 'video'], return 对象应该有包含能量和视频的标签名称(它仍然可以有其他标签,如精选)
tags: [
{
localizedTitle: null,
title: 'Featured',
name: 'featured'
},
{
localizedTitle: null,
title: 'Video',
name: 'video'
},
{
localizedTitle: null,
title: 'Energy',
name: 'energy'
}
]
使用 Array.prototype.filter(),我能够 return 匹配单个值的对象 -> tags[0].name 但是,我需要 return 基于所有标签名称的对象 -> tags[0].name , tags[1].name , tags[2].name
我尝试使用 Array.prototype.map() 将所有标签名称组合到一个数组中 -> Array(3) [ "featured", "video", "energy" ]
并尝试使用 Array.prototype.filter() 到基于新标签数组的 return 对象,但它没有 return 除了数组 []
之外的任何对象请在 https://codepen.io/anon/pen/KjLKBR
查看测试代码我期望
的输出 return 对象{
title: 'Video Energy Featured',
tags: [
{
localizedTitle: null,
title: 'Featured',
name: 'featured'
},
{
localizedTitle: null,
title: 'Video',
name: 'video'
},
{
localizedTitle: null,
title: 'Energy',
name: 'energy'
}
]
}
非常感谢。非常感谢。
您使用 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
的列表来调用它。它 returns 过滤列表。
这不是最佳代码,但它应该可以完成工作。