【问题标题】:Retrieving JSON data with certain values检索具有特定值的 JSON 数据
【发布时间】:2019-10-07 13:52:57
【问题描述】:

我正在尝试从带有特定标签的 JSON 数据中检索帖子。

data: any = 
[
    {"id": 1, 
    "title": "title 1", 
    "description": "Lorem Ipsum.", 
    "by": "author",
    "tags": [
        { "tag":"facebook" }, 
        { "tag": "twitter" } ]
    },
    {"id": 2,
    "title": "title 2",
    "description": "Lorem Ipsum.",
    "by": "author",
    "tags": [
        { "tag": "google" }, 
        { "tag": "twitter" } ]
    },
    {"id": 3,
    "title": "title 3",
    "description": "Lorem Ipsum.",
    "by": "author",
    "tags": [ 
        { "tag": "reddit" }, 
        { "tag": "instagram" } ]
    },
    {"id": 4,
    "title": "title 4",
    "description": "Lorem Ipsum.",
    "by": "author",
    "tags": [
        { "tag":"reddit" },
        { "tag":"9gag" } ]
    }
];

我要检索的输出是使用某个标签的帖子。 假设我想要的某个标签是“9gag”,结果应该是这样的:

result: any = 
    [
        {"id": 3,
        "title": "title 3",
        "description": "Lorem Ipsum.",
        "by": "author",
        "tags": [ 
            { "tag": "reddit" }, 
            { "tag": "instagram" } ]
        },
        {"id": 4,
        "title": "title 4",
        "description": "Lorem Ipsum.",
        "by": "author",
        "tags": [
            { "tag":"reddit" },
            { "tag":"9gag" } ]
        }
    ];

【问题讨论】:

  • id:3的文章不匹配

标签: json angular


【解决方案1】:

您可以使用Array.filter()Array.some() 来做到这一点。

const data = [{ "id": 1, "title": "title 1", "description": "Lorem Ipsum.", "by": "author", "tags": [{ "tag": "facebook" }, { "tag": "twitter" } ] }, { "id": 2, "title": "title 2", "description": "Lorem Ipsum.", "by": "author", "tags": [{ "tag": "google" }, { "tag": "twitter" } ] }, { "id": 3, "title": "title 3", "description": "Lorem Ipsum.", "by": "author", "tags": [{ "tag": "reddit" }, { "tag": "instagram" } ] }, { "id": 4, "title": "title 4", "description": "Lorem Ipsum.", "by": "author", "tags": [{ "tag": "reddit" }, { "tag": "9gag" } ] } ]; 

function getPostsByTag(posts, tag) {
  return posts.filter(post => post.tags.some(item => item.tag === tag));
}

console.log(getPostsByTag(data, "9gag"));

【讨论】:

    【解决方案2】:

    您有一个文章列表,因此您可以使用过滤器:

    let result = data.filter(...)
    

    然后应用条件:

    article.tags.some(tag => (tag.tag.includes(yourString)))
    

    最后:

    let yourString = "9gag";
    data.filter(
      article => (article.tags.some(
                    tag => (tag.tag.includes(yourString))
                 )
      )
    );
    

    这里有一个很好的例子:https://stackoverflow.com/a/44313087/7604006

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多