javascript - 仅显示具有特定类型的数组内的对象 [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”,并跳过其余的。有没有一种我还不知道的干净、简单的方法来做到这一点?我知道我可以使用该对象然后对它们进行索引,但是我得到了一长串可能确实需要过滤器的对象。
请对我放轻松,这里的新鲜人!
解决方案
执行以下操作的方法不是很有效,但尝试使用过滤器和深度克隆对象不改变主对象我的运气:
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);
推荐阅读
- java - 从父实体中删除时的Spring数据JPA @PreRemove ConcurrentModificationException
- sql - 提取日期并将其转换为字符
- java - 在 JUnits TestsSuite 之前运行的代码或专门设置将首先执行和最后执行的测试的代码。(只有第一个和最后一个,不是全部)
- oracle - 从oracle中的字符串中提取值
- c# - 如何在运行时重新加载自定义属性?ASP.NET 核心 MVC
- c++ - 将字符串转换为 int 问题
- r - R:如何解决多个变量的应用函数的错误代码?
- c# - 在 WPF 应用程序中调用 Application.Current.Dispatcher.Invoke 时在哪里放置 try-catch
- javascript - 如何使 X 轴时间刻度在图表上的元素之间具有相等的间隔,与时间范围无关
- spring - Spring Cloud Gateway 的 Cookie 路径