gpt4 book ai didi

javascript - 如何解析(无限)嵌套对象符号?

转载 作者:行者123 更新时间:2023-11-29 14:58:40 26 4
gpt4 key购买 nike

我目前正在为转换这个对象散列而崩溃:

"food": {
"healthy": {
"fruits": ['apples', 'bananas', 'oranges'],
"vegetables": ['salad', 'onions']
},
"unhealthy": {
"fastFood": ['burgers', 'chicken', 'pizza']
}
}

像这样:

food:healthy:fruits:apples
food:healthy:fruits:bananas
food:healthy:fruits:oranges
food:healthy:vegetables:salad
food:healthy:vegetables:onions
food:unhealthy:fastFood:burgers
food:unhealthy:fastFood:chicken
food:unhealthy:fastFood:pizza

理论上,它实际上只是循环遍历对象,同时跟踪路径和最终结果。

不幸的是,在我完成所有嵌套之前,我不知道如何循环。

var path;
var pointer;
function loop(obj) {
for (var propertyName in obj) {
path = propertyName;
pointer = obj[propertyName];

if (pointer typeof === 'object') {
loop(pointer);
} else {
break;
}
}
};

function parse(object) {
var collection = [];

};

有两个问题可以解决:

  1. 如果我使用递归编程,它会丢失已解析的属性的状态。
  2. 如果我不使用它,我将无法解析 infinite。

有什么办法可以解决这个问题吗?

问候

最佳答案

您的递归函数不起作用的原因是您将状态存储在它之外。您希望状态中,以便每次调用都跟踪其状态。

像这样:

var obj = /* ... the object ... */;
var lines = loop([], "", obj);

function loop(lines, prefix, obj) {
var key, sawOne = false;

// Is it an array?
if (Object.prototype.toString.call(obj) === "[object Array]") {
// Yes, in your example these are all just strings to put
// at the end, so do that
for (key = 0; key < obj.length; ++key) {
lines.push(prefix + ":" + obj[key]);
}
}
else {
// No, it's an object. Recurse for each property, adding the
// property to the prefix we use on each line
for (key in obj) {
loop(lines, prefix ? (prefix + ":" + key) : key, obj[key]);
}
}

return lines;
}

完全即兴且未经测试,但您明白了。

编辑:但显然它有效,因为 Michael Jasper很友好地做了一个live demo ( source ) 我稍微调整了一下。

关于javascript - 如何解析(无限)嵌套对象符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13661568/

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