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

标签 javascript json function recursion

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

来自此:

{
  "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/

相关文章:

javascript - 过滤 - 多项选择 jquery javascript

javascript - 如何使用 Clippy.js 在单击而不是超时时隐藏元素?

javascript - jquery 当前导航项选择器

javascript - JS - 构造函数中的 JSON/ARRAY 传递变量(自定义库)

php - 找出在 PHP 中调用我的函数的文件名

function - 为什么 println 函数不是纯函数? (Clojure)

javascript - 循环 JSON 结果并相应地设置 div html

sql - jsonb 在数组中查找一个值

json - 对 API 进行 curl 并从 JSON 中获取特定字段

javascript - var functionName = function() {} vs function functionName() {}