【问题标题】:Create Hashmap like implementation using java-script for json使用 json 的 java-script 创建类似 Hashmap 的实现
【发布时间】:2016-06-22 22:07:31
【问题描述】:

我希望创建类似于数组的 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"}

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

我的代码只是计算深度并将 / 添加到它向下移动的每个级别,但我希望输出如上所示。有推荐的程序员吗?

【问题讨论】:

    标签: javascript arrays json hashmap


    【解决方案1】:

    以下应该可以解决问题(根据您的需要使用任一版本):

    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);
    

    这将使用您需要的结果填充 testHash。

    【讨论】:

    • 应该作为 java 脚本工作还是应该包含任何特定的库?对不起,这是第一次。我正在听到 abt ecma 脚本。有没有办法将其转换为 JS ?
    • ECMAScript 是 javascript 的“版本”。上面的 sn-p 是在版本 6 中编写的,不兼容所有浏览器。我将使用可以正常工作的版本 5 更新我的答案。
    • 谢谢你的回答..让我检查一下,谢谢更多:)
    • 谢谢,这就像一个魅力但是如果我需要将输出替换为 {"0":*,"1":"containerc1/containerc2","2":"containerc1/ containerc2/listcar","3":"containerc1/containerc2/listcar/leafwheels","4":"containerc1/containerc2/listcar/leafwheels/max-elements","5":"containerc1/text4"}
    • 将可选数字作为参数传递给将在每一步中递增的函数。然后用它代替钥匙。
    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 2015-03-05
    • 2012-03-10
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多