首页 > 解决方案 > 仅显示具有特定类型的数组内的对象 [GRAPHQL]

问题描述

所以,我对编程相当陌生,我试图只显示 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”,并跳过其余的。有没有一种我还不知道的干净、简单的方法来做到这一点?我知道我可以使用该对象然后对它们进行索引,但是我得到了一长串可能确实需要过滤器的对象。

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

标签: javascriptjsongraphqlhandlebars.jsjsreport

解决方案


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

 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);


推荐阅读