javascript - JavaScript:如何按嵌套在对象 2 级深处的值过滤数组
问题描述
我有一个对象数组。
在数组的每个对象中,可以有多个“Book”对象,所有对象都具有动态键。我想要至少有一个新的“书”对象的对象。
例如:
const arr = [
{
id: '123',
book1242: {isNew: true},
book9023: {isNew: false},
},
{
id: '123',
book0374: {isNew: false},
book9423: {isNew: false},
},
{
id: '123',
book8423: {isNew: false},
book9023: {isNew: false},
},
{
id: '123',
book6534: {isNew: true},
book9313: {isNew: false},
},
]
所以我的过滤数组将由原始数组的第一个和最后一个元素组成
预期的过滤数组
const arr = [
{
id: '123',
book1242: {isNew: true},
book9023: {isNew: false},
},
{
id: '123',
book6534: {isNew: true},
book9313: {isNew: false},
},
]
我试过使用filter
and map
,但我到了必须循环检查哪本书是新书的地步,我不确定如何在过滤器中返回该对象。
解决方案
听起来你想要这样的东西:
arr.filter((o) => Object.values(o).some((b) => b.isNew))
您的数组是否只有id
和的键bookwxyz
?如果不是,您可能需要检查这些值以确保它们不是未定义的
您还可以使用 Object.entries 和正则表达式显式检查密钥:
arr.filter((o) => Object.entries(o).some(([key, value]) => /book\d{4}/.test(key) && value.isNew))
推荐阅读
- excel - 进行更改时如何突出显示 Exel 黄色中的一行和红色单元格(不止一次更改)
- mongodb - Union 2 表就像它是单个实体,然后排序、跳过和限制 (Mongoose)
- node.js - Axios - 等待所有响应运行 .then 块
- apache-spark - 派生 Spark SQL 中的分区数
- firebase - 限制谁可以在没有 Firestore 规则或 Firebase 身份验证的情况下获取实时文档更新
- powershell - 使用 Powershell 编辑本地组策略
- python - 从逗号分隔的单词序列中以排序形式打印唯一单词
- php - 使用 PDO 处理 PHP 中的 MySQL 错误 1104
- java - Java 从隐藏在用户点击后面的网站中抓取数据?
- python - 从一个接收数据列表的函数创建多个 matplotlib 图表