Javascript lodash flatten hierarchical object

Javascript lodash flatten hierarchical object

本文关键字:object hierarchical flatten lodash Javascript      更新时间:2023-09-26

我有分层的json。我想把它压平。这是我的json:

{
  "id": "111",
  "name": "v5",
  "define": {
    "system": "abc",
    "concept": [{
      "code": "y7",
      "concept": [{
        "code": "AGG",
        "display": "Abcess"
      }, {
        "code": "ABS",
        "display": "Abcess"
      }]
    }, {
      "code": "y8",
      "concept": [{
        "code": "AGc",
        "display": "ccc"
      }, {
        "code": "hjj",
        "display": "uii"
      }]
    }]
  }
}

有没有办法在lodash中将此json扁平化为仅"代码,显示"数组?

如果没有,是否有其他库可以做到这一点?谢谢。

例如结果:

[{
  "code": "AGG",
  "display": "Abcess"
}, {
  "code": "ABS",
  "display": "Abcess"
}, {
  "code": "AGc",
  "display": "ccc"
}, {
  "code": "hjj",
  "display": "uii"
}]

具有Array#forEach()的解决方案。

var data = { "id": "111", "name": "v5", "define": { "system": "abc", "concept": [{ "code": "y7", "concept": [{ "code": "AGG", "display": "Abcess" }, { "code": "ABS", "display": "Abcess" }] }, { "code": "y8", "concept": [{ "code": "AGc", "display": "ccc" }, { "code": "hjj", "display": "uii" }] }] } },
    flat = function (array) {
        var r = [];
        array.forEach(function (a) {
            a.concept.forEach(function (b) {
                r.push(b);
            });
        });
        return r;
    }(data.define.concept);
document.write('<pre>' + JSON.stringify(flat, 0, 4) + '</pre>');

有没有办法在 lodash 中将此 json 扁平化为"代码"数组, 只玩"?

你的意思是连接所有concept孩子?

试试这个

var obj = {
  "id": "111",
  "name": "v5",
  "define": {
    "system": "abc",
    "concept": [{
      "code": "y7",
      "concept": [{
        "code": "AGG",
        "display": "Abcess"
      }, {
        "code": "ABS",
        "display": "Abcess"
      }]
    }, {
      "code": "y8",
      "concept": [{
        "code": "AGc",
        "display": "ccc"
      }, {
        "code": "hjj",
        "display": "uii"
      }]
    }]
  }
}
var output = [];
obj.define.concept.forEach(function(o) {
  output = output.concat(o.concept)
});
document.write("<pre>" + JSON.stringify(output, 0, 4) + "</pre>");