node.js - 如何从 JSON 结构中删除相同的命名对象,但结构中的模式不统一?
问题描述
我有一个 json 结构,有点奇怪,这是从远程设备返回的,我必须按原样接受它。例如...
{"_":"e6a7f749","4321013c":{"_":"5d839a60"},"67ea44a0":{"_":"ec7500f9"},"6bea5f08":{"_":"ecdaead4"},"1e92311e":{"_":"5348dab3"}}
我需要删除“_”键值对,但保留其他所有内容,这样......
{"4321013c":,"67ea44a0":,"6bea5f08":,"1e92311e":,}
如您所见,这仅从原始结构中留下了一些“键”。然后我想将“键”转换为一个简单的值数组。这样的...
["4321013c","67ea44a0","6bea5f08","1e92311e"]
顺便说一句,所有这些都是在 node.js (JavaScript) 中完成的。
解决方案
这是我的解决方案。我不确定我是否完全理解了这个问题。
但是在这里我遍历对象,将所有键和值收集到另一个扁平对象中。最后,我在上面运行 Object.keys 并删除任何“_”值。
const obj = {
"_":"e6a7f749",
"4321013c":{"_":"5d839a60"},
"67ea44a0":{"_":"ec7500f9"},
"6bea5f08":{"_":"ecdaead4"},
"1e92311e":{"_":"5348dab3"}
};
const collectValues = (root) => {
return Object.keys(root).reduce((map, key) => {
const value = root[key];
if (typeof value === 'string') {
map = {
...map,
[key]: true,
[value]: true
};
} else {
const nestedValues = collectValues(root[key]);
map = {
...map,
...nestedValues,
[key]: true
};
}
return map;
}, {});
}
const uniqueArray = Object.keys(collectValues(obj)).filter(v => v !== '_');
console.log(uniqueArray);
推荐阅读
- neo4j - 具有无限通配符的全文搜索
- mysql - mysql binlog文件中表名和db名是否区分大小写
- linux - “grep -rl 'string' ./”如何搜索二进制文件中的可读代码?我可以查看它正在查看的内容而不是查看二进制输出吗?
- javascript - “this”关键字在类方法中指的是什么?
- wpf - 带有 WPF 的 Powershell GUI - 失去对 GUI 的关注
- flutter - 如何在颤动的两个数据中设置对齐?
- python-3.x - 我需要一些帮助来尝试了解如何循环回到函数的开头并保留在 python 中返回时所做的更改
- java - 我正在尝试创建一个类以从 Firebase 检索显示名称和电子邮件。但它返回 Null
- android - 华为 App Gallery 控制台应用下载量和活跃用户统计
- java - 我该怎么办,伙计们,我的进程 8080 没有被杀死