javascript - 用地图替换嵌套对象
问题描述
我正在尝试用带有地图的更新对象替换嵌套对象。但是,它只有在我替换每个属性时才有效,但我不能用更新的对象替换整个对象。以下是我的结构:
[
{
name: 'Parent 1',
data: [
{
id: 1,
name: 'Child 1',
// more properties ...,
},
{
id: 2,
name: 'Child 2',
// more properties ...
}
]
}
]
现在我想用更新的孩子替换其父母中的孩子。这就是我现在拥有的,它可以工作,但是手动映射每个属性是不可维护的:
parents.map(parent =>
parent.data.map(child => {
if (child.id === newChild.id) {
child.name = newChild.name;
// more mappings ...
}
})
);
这是行不通的,但我更喜欢的解决方案:
parents.map(parent =>
parent.data.map(child => {
if (child.id === newChild.id) {
child= newChild;
}
})
);
我也对其他解决方案持开放态度,而不是使用地图。我不确定这是否是正确的做法。
解决方案
我不知道这newChild
是从哪里来的,但是...
如果你想替换整个孩子,你必须使用它的索引。像这样,
parents.forEach(parent => parent.data.forEach((child, index) => {
if (child.id == newChild.id) child.data[index] = newChild;
}));
如果不是,您只是child
在该循环中更改变量的值。
因为我假设您要编辑原始数组,所以我将其更改map
为。forEach
用这个
parents = parents.map(parent => parent.data.map((child, index) => (child.id == newChild.id) ? newChild : child));
这样,如果ids
匹配,新孩子将在地图中占据旧孩子的这个空间,否则仍将返回旧孩子
推荐阅读
- python - 如何删除机器人在 discord.py 上的上一条消息
- ios - SwiftUI 中是否有 .onReappear 等价物
- spring-boot - 如何在 Spring Boot 中的日期间隔内查找?
- elasticsearch - 即使特定字段值不可用也返回字段
- node.js - Multer 和 express-validator 在验证中产生问题
- php - 如何从 PHP 网站向 iOS 和 Android 发送推送通知?
- amazon-emr - EMR:作业流程中的所有从站都因 Spot 而终止
- reactjs - React 调用动态状态名称
- firebase - 如何在颤振中使用 .currentUser 方法
- javascript - 检测 Express 中的会话丢失?