【问题标题】:Only display objects inside of an array with certain type [GRAPHQL]仅显示具有特定类型的数组内的对象 [GRAPHQL]
【发布时间】:2021-03-15 03:23:41
【问题描述】:

所以,我对编程还很陌生,我试图只显示 api 响应数组中的某些对象。除此之外,我正在使用 JSReport 和 Handlebars。有没有办法过滤掉具有特殊值的那些?

这是一个示例代码:

    {
  "data": {
    "books": {
      "author": {
        "name": "Book Bookinson",
        "books": [
          {
            "name": "book 1 ",
            "stars": "3"
          },
          {
            "address1": "book 2 ",
            "phone1": "1"
          },
          {
            "name": "book 3 ",
            "stars": "3"
          },
          {
            "address1": "book 4 ",
            "phone1": "3"
          },
        ]
      },
    }
  }

所以在上面的代码中,我想过滤掉,所以我只得到带有“stars”的对象:“1”,并跳过其余部分。有没有一种我还不知道的干净、简单的方法来做到这一点?我知道我可以使用该对象然后对它们进行索引,但我得到了一长串可能确实需要过滤器的对象。

这里的新鲜人,请放轻松!

【问题讨论】:

  • 对于 javascript 数组,您可以使用 .filter().find()。他们做不同的事情,但是您的问题对于哪一个合适是模棱两可的。您可以阅读文档以了解它们之间的差异。
  • 您需要带有stars == 1 过滤书籍的完整对象还是只需要过滤器d books 数组?
  • 需要完整的对象。更准确地说,有不同类型的交易,每一个都有一个“typeCode”,比如“buy”或“sell”,我想过滤掉,所以我只得到“buy”作为例子,然后能够使用连接到 typeCode 的值。
  • @MathiasKoerth 希望答案对您有所帮助,直到发布更有效的答案?
  • 使用react + apollo客户端,无需学习古老技术;)

标签: javascript json graphql handlebars.js jsreport


【解决方案1】:

下面的方法不是很有效,但是我尝试了使用过滤器和深度克隆对象来不改变主对象的运气:

 let bookData = {
  "data": {
    "books": {
      "author": {
        "name": "Book Bookinson",
        "books": [
          {
            "name": "book 1 ",
            "stars": "1"
          },
          {
            "address1": "book 2 ",
            "phone1": "1"
          },
          {
            "name": "book 3 ",
            "stars": "3"
          },
          {
            "address1": "book 4 ",
            "phone1": "3"
          },
        ]
      },
    },
  },
  }
  
  let oneStar = JSON.parse(JSON.stringify(bookData)); // deep clone 
  oneStar.data.books.author.books =  oneStar.data.books.author.books.filter(book=>typeof book.stars!=="undefined" && parseInt(book.stars)===1); // filter if book has property stars and equals 1

  /* console.log(bookData) */
  console.log(oneStar);

【讨论】:

  • 没有加星标的书的作者可能应该被过滤掉......当他过滤的书不为空时,我会使用oneStar.data.books.map() 创建具有新作者实体的新数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2021-06-20
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
相关资源
最近更新 更多