gpt4 book ai didi

javascript - 在 JavaScript 中扁平化 JSON

转载 作者:行者123 更新时间:2023-12-02 23:53:21 24 4
gpt4 key购买 nike

我正在尝试将多级 JSON 对象展平为简单输出。

key2:{  
keyB1:{
keyC1:{
keyD1:'value b c 1'
}
},
keyB2:{
keyC2:'value b c 2'
}
}

我的输出在第一次迭代中很好,但第二次时,计数器没有设置。请运行代码来查看问题。

function flattenInput(datainput) {
const result = {};

const callit1 = function(keylist, datainput) {
for (i in datainput) {
keylist = keylist + '.' + i;
if (typeof datainput[i] === 'object') {
return callit1(keylist, datainput[i]);
} else {
return keylist;
}
}
}

let klist = '';
for (i in datainput) {
if (typeof datainput[i] === 'object') {
klist = callit1(i, datainput[i]);
console.log(klist);
}
}
console.log(result);
}

flattenInput(input);

预期:

key2.keyB1.keyC1.keyD1: 'value b c 1'

key2.keyB2.keyC2: 'value b c 2'

我得到什么:

key2.keyB1.keyC1.keyD1: 'value b c 1'(only)

最佳答案

您可以使用递归来深入遍历键,并使用键数组来跟踪访问过的键。

假设最深的对象是一个字符串。

let obj = {   key2: {     keyB1: {       keyC1: {         keyD1: 'value b c 1'       }     },     keyB2: {       keyC2: 'value b c 2'     }   } };

function downstream(desiredObj, currentObj, keys) {
if (typeof currentObj === 'string') {
desiredObj[keys.join('.')] = currentObj;
} else {
Object.keys(currentObj).forEach(key => downstream(desiredObj, currentObj[key], [...keys, key]));
}
}

let result = {};
Object.keys(obj).forEach(key => downstream(result, obj[key], [key]));

console.log(result);

关于javascript - 在 JavaScript 中扁平化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55544810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com