ES5 javascript根据数组多个键对象

时间:2019-07-13 12:45:15

标签: json filter ecmascript-5

使用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'
        }
      ]
    }

非常感谢。非常感谢。

1 个答案:

答案 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的列表来调用它。它返回过滤的列表。

这不是最理想的代码,但是应该可以完成工作。