使用JSON使用Java-Script创建Hashmap,例如实现



我希望创建像数组一样的hashmap,它将包含从具有嵌套对象的另一个数组派生的键和值。

所以我正在尝试以下代码。

    var testhash={},data=[
      {
        "yang_type": "container",
        "name": "c1",
        "value": "",
        "children": [
          {
            "yang_type": "container",
            "name": "c2",
            "value": "",
            "children": [
              {
                "yang_type": "list",
                "name": "Car",
                "value": "",
                "children": [
                  {
                    "yang_type": "leaf",
                    "name": "wheels",
                    "value": "",
                    "children": [
                      {
                        "name": "max-elements",
                        "value": "4",
                        "children": [],
                        "yang_type": ""
                      }
                    ]
                  }
                ]
              },
              {
                "yang_type": "",
                "name": "text",
                "value": "4",
                "children": []
              }
            ]
          }
        ]
      }
    ];
 var k='';
                    function loop1(a, depth) {
                        var l,s='';
                        if(depth){s += '/';}
                        k=k+a.yang_type+a.name+a.value;
                        v=Array(depth + 1).join(s) + a.yang_type+a.name+a.value;
                        testhash.push(k:v);
                        //console.log(l);
                          //console.log(Array(depth + 1).join("/") + a.yang_type,a.name,a.value);
                          //hashServiceParams.push(Array(depth + 1).join("/") + a.yang_type,a.name,a.value);
                          Array.isArray(a.children) && a.children.forEach(function(child) {
                              loop1(child, depth + 1);
                          });
                        }
                    console.log(testhash);

输出,我期望是

{"containerc1":*,"containerc2":"containerc1/containerc2","listcar":"containerc1/containerc2/listcar","leafwheels":"containerc1/containerc2/listcar/leafwheels","max-elements":"containerc1/containerc2/listcar/leafwheels/max-elements","text4":"containerc1/text4"}

上面的数组将充当包含密钥和值的哈希映射,其中值将该数据的一部分存储在树结构中。

我的代码只是计算深度并将/添加到它向下移动的每个级别,但我希望输出如上所示。任何建议编码器?

以下操作应执行(根据您的需要使用任一个版本):

ecmascript 6:

function parseData(data, prefix) {
  let result = {};
  data.forEach(o => {
    const key = `${o.yang_type}${o.name}`;
    result[key] = prefix ? `${prefix}/${key}` : '*';
    if (o.children) {
      const newPrefix = prefix ? `${prefix}/${key}` : key;
      result = Object.assign(result, parseData(o.children, newPrefix));
    }
  });
  return result;
}

ECMASCRIPT 5:

function shallowMerge(obj1,obj2){
  var obj3 = {};
  for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
  for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
  return obj3;
}
function parseData(data, prefix) {
  var result = {};
  data.forEach(function (o) {
    var key = '' + o.yang_type + o.name;
    result[key] = prefix ? prefix + '/' + key : '*';
    if (o.children) {
      var newPrefix = prefix ? prefix + '/' + key : key;
      result = shallowMerge(result, parseData(o.children, newPrefix));
    }
  });
  return result;
}

为了使用它,您只需要执行以下操作:

let testhash = parseData(data);

这将填充您需要的结果。

最新更新