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 过滤列表。

这不是最佳代码,但它应该可以完成工作。