gpt4 book ai didi

javascript - 在 JavaScript 中递归地转换对象

转载 作者:行者123 更新时间:2023-12-03 09:27:04 24 4
gpt4 key购买 nike

这几天我一直在为这个问题苦苦挣扎。我必须将一个对象转换为另一个具有不同结构的对象。

来自此:

{
"a1" : "key",
"a2" : {
"b1" : "key",
"b2" : {
"c1" : "key"
}
}
}

对此:

{
"key" : {
"a1" : null,
"a2" : [
{
"b1" : null,
},
{
"b2" : [
"c1" : null
]
}
]
}
}

为了更好地理解,a1a2b1b3等将代表CSS选择器。 null 将是应用于节点的值。但就目前而言,这应该不重要。

我当前(不起作用)的功能如下所示:

var json = {};
var obj = {};

function build(objA){
for(var a in objA){
var key = objA[a];

if(key instanceof Object){
obj = {}; obj[a] = key;
build(key);
} else {
json[key] = json[key] || {};

if(obj == undefined){
json[key][a] = null;
} else {
var p = firstKeyOf(obj);
var key = obj[p][a];
json[key][p] = json[key][p] || [];

var selector = {};
selector[a] = null;

json[key][p].push(selector);
}
}
}
}

产生:

{
"key" : {
"a1" : null,
"a2" : [
{
"b1" : null
}
],
"b2" : [
{
"c1" : null
}
]
}
}

我错过了什么?感谢您的帮助,谢谢!

最佳答案

试试这个

var Converter = (function() {

var pic;

function _rec(a, o) {
for(var k in o){
var s = o[k];
var arr = a.slice();
arr.push(k);
if (s instanceof Object) { _rec(arr, s); }
else {
if ("string" == typeof s) { arr.unshift(s); _attach(pic, arr); }
else console.log('Invalid key type');
}
}
}

function _attach(p, m) {
var k = m.shift();
if ( ! p.hasOwnProperty(k)) p[k] = (m.length == 0) ? null : {};
if (m.length > 0) p[k] = _attach(p[k], m);
return p;
}

function _reverse(obj) {
if ( ! (obj instanceof Object)) console.log('First parameter need to be an Object');
else { pic = {}; _rec([], obj); return pic; }
}
return {
reverse: _reverse,
attach: _attach
}
})();

关于javascript - 在 JavaScript 中递归地转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31640744/

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