javascript - 使用可变过滤器从 json 对象中删除项目
问题描述
我有一个带有 3 个“公会”的 json 文件。这些公会有一个 id 和一个包含角色 id 的数组。
[
{
"id": 1, // This is the id of a guild
"roleIds": [
1,
2,
3
]
},
{
"id": 2,
"roleIds": [
4,
5,
6
]
},
{
"id": 3,
"roleIds": [
7,
8,
9
]
}
]
另一方面,我有一个客户持有另一个带有公会和角色的 json 对象。如果客户端不存在角色 ID,则数据不一致。然后我想从json文件中删除ID。
通常我通过使用从数组中删除项目array.filter(element => element.id !== targetId);
const guilds = fs.readFileSync(file);
const targetGuild = guilds.find(guild => guild.id == targetGuildid);
let targetRoleIds = targetGuild.roleIds;
targetRoleIds.forEach(targetRoleId => {
if (!roleIdExists(guild, targetRoleId)) {
targetRoleIds = targetRoleIds.filter(id => id != targetRoleId);
}
});
fs.writeFileSync(file, JSON.stringify(guilds));
使用targetRoleIds = targetRoleIds.filter(id => id != targetRoleId);
不影响guilds
对象。
我怎样才能变异它?
解决方案
真的,你的代码很混乱:
- 您读取文件并将其分配给
guilds
变量,但最终写入相同的变量而不进行修改。 - 在行代码中
if (!roleIdExists(guild, targetRoleId))
,我不知道您如何获取guild
变量。
请检查您的代码。我留下了我理解的代码
let guilds = fs.readFileSync(file);
guilds = guilds.map((guild) => {
if (guild.id === targetGuildId) {
guild.roleIds = guild.roleIds.filter((roleId) => targetGuildRoles.includes(roleId));
}
return guild;
})
fs.writeFileSync(file, JSON.stringify(guilds));
推荐阅读
- c# - “本地编译失败。.Net 无法加载运行时程序集”
.dll'." 的长度为 85,在 "Loc" 附近不同(索引 0) - xaml - Xamarin,带有按钮的居中标题的xaml titleview
- pandas - 根据指定范围乘以行数
- python - 使用 Opencv 或 Python 中的任何其他库的 HDMI-USB 视频采集卡流
- google-chrome-devtools - Chrome - 检查设备 - 选择元素不起作用
- c# - C#异常处理,暂时停止循环
- python - 嘿,我想用 python 向多个人发送电子邮件
- sql - 如果标识符相同,则通过列复制值
- python - 如何在 matplotlib 中获取可变颜色条?
- r - 解释异常检测 R 值