javascript - 将json对象转换为数组
问题描述
var object =
{
'a':
{
'b': { 'ba': {}, 'bb': {}, 'bc': {}, 'bd': {} },
'c: { 'ca': {}, 'cb': {}, 'cc': {} },
'd': {},
'e': { 'ea': {}, 'eb': {}, 'ec: {}, 'ed': {}, 'ef': {} },
'f: {},
'g': {},
'h': {}
},
'aa':
{
'bb': { 'bba': {}, 'bbb': {},''bbc': {},'bbd': {},'bbe': {},
'bbf': {}, 'bbg': {} },
'cc': {},
'dd': { 'dda': {}, 'ddb': {}, 'ddc': {} },
'ee': {},
'ff': {}
},
}
我想转换成这样
['a b ba'] ['a b bb'] ['a b bc'] ['a b bd']
['a c ca'] ['a c cb'] ['a c cc']['a d']
['a e ea'] ['a e eb'] ['a e ec'] ['a e ed'] ['a e ef']
['a f']['a g']['a h']
['aa bb bba'] ['aa bb bbb'] ['aa bb bbc'] ['aa bb bbd'] ['aa bb bbf']
['aa bb bbg']
['aa cc']['aa dd dda'] ['aa dd ddb'] ['aa dd ddc']['aa ee']['aa ff']
只有javascript ..有可能转换??
我想使用 repeat for 和 hasOwnproperty。
如果它不起作用,我想将其更改为数组。
帮助。
解决方案
您需要递归地遍历对象的嵌套键结构。
您可以使用 . 检查您是否在分支的末尾Object.keys
。如果没有钥匙,我们可以返回。
您可以使用循环遍历节点的分支Object.entries
通过使用concat
,我们不断向平面结果数组添加分支,直到我们查看了树中的每个节点。
var object={a:{b:{ba:{},bb:{},bc:{},bd:{}},c:{ca:{},cb:{},cc:{}},d:{},e:{ea:{},eb:{},ec:{},ed:{},ef:{}},f:{},g:{},h:{}},aa:{bb:{bba:{},bbb:{},bbc:{},bbd:{},bbe:{},bbf:{},bbg:{}},cc:{},dd:{dda:{},ddb:{},ddc:{}},ee:{},ff:{}}};
var keyPaths = (obj, path = [], paths = []) =>
Object.keys(obj).length === 0
? paths.concat(path.join(" "))
: Object.entries(obj)
.reduce(
(ps, [k, v]) => keyPaths(v, path.concat(k), ps),
paths
);
console.log(keyPaths(object));
推荐阅读
- python - Python 会自动更新其值为另一个对象的变量吗?
- react-native - react-native 升级后,iOS 包失败
- phpstorm - 在 PhpStorm 中使字体更清晰
- amazon-web-services - RDS 设置数据库名称 AWS 控制台
- sql-server - 通过循环遍历 Excel 工作表 ColumnA 中的 ID,批量处理对 SQL 数据库的多个查询
- google-cloud-platform - 通过 Google IAP 使用嵌套身份验证
- airflow - Apache 气流,TimeDeltaSensor 延迟 DAG 中的所有任务
- sql - 如何动态聚合 YTD 度量
- swift - 如何在 iOS 设备中引导用户进行 Wifi 设置(iOS 13 swift)
- bittorrent - 有没有办法利用 Bittorrent DHT 处理小数据