【问题标题】:How to merge nested objects into their parents in Javascript?如何在 Javascript 中将嵌套对象合并到它们的父对象中?
【发布时间】:2015-02-16 18:17:36
【问题描述】:

我正在尝试在 Angular.js 中使用过滤器功能,但它不适用于对象。

如何使用 Javascript 将嵌套对象合并到其父对象中?

例如我想转这个:

{
  "data" : [ {
    "character" : {
      "realm" : 1,
      "displayName" : "John",
    },
    "points" : 1388.0,
    "wins" : 84,
    "losses" : 31
  }, {
    "character" : {
      "realm" : 1,
      "displayName" : "Steven",
    },
    "points" : 1363.0,
    "wins" : 96,
    "losses" : 24
  }, {
    "character" : {
      "realm" : 1,
      "displayName" : "Mark",
    },
    "points" : 1322.0,
    "wins" : 154,
    "losses" : 43
  }
]}

进入这个:

{
  "data" : [ {
    "realm" : 1,
    "displayName" : "John",
    "points" : 1388.0,
    "wins" : 84,
    "losses" : 31
  }, {
    "realm" : 1,
    "displayName" : "Steven",
    "points" : 1363.0,
    "wins" : 96,
    "losses" : 24
  }, {
    "realm" : 1,
    "displayName" : "Mark",
    "points" : 1322.0,
    "wins" : 154,
    "losses" : 43
  }
]}

谁能帮帮我?

【问题讨论】:

  • 听起来你需要extend
  • 那些是对象,不是数组!!!不确定您是如何尝试在 .data 上使用 filter 以使其不起作用?

标签: javascript angularjs object merge


【解决方案1】:

使用

var obj = {
  "data": [{
    "character": {
      "realm": 1,
      "displayName": "John",
    },
    "points": 1388.0,
    "wins": 84,
    "losses": 31
  }, {
    "character": {
      "realm": 1,
      "displayName": "Steven",
    },
    "points": 1363.0,
    "wins": 96,
    "losses": 24
  }, {
    "character": {
      "realm": 1,
      "displayName": "Mark",
    },
    "points": 1322.0,
    "wins": 154,
    "losses": 43
  }]
};
for (var key in obj.data) {
  obj.data[key].realm = obj.data[key].character.realm; // store the realm key to the obj
  obj.data[key].displayName = obj.data[key].character.displayName; // store the displayName key to the obj
  delete obj.data[key].character; // delete a character key

}

【讨论】:

    【解决方案2】:

    纯 Javascript 方法:

    var source = {
      "data" : [ {
        "character" : { "realm" : 1, "displayName" : "John" },
        "points" : 1388.0,
        "wins" : 84,
        "losses" : 31
      }, {
        "character" : { "realm" : 1, "displayName" : "Steven" },
        "points" : 1363.0,
        "wins" : 96,
        "losses" : 24
      }, {
        "character" : { "realm" : 1, "displayName" : "Mark" },
        "points" : 1322.0,
        "wins" : 154,
        "losses" : 43
      }
    ]}
    
    source.data.forEach(function(item) {
        var character = item.character;
        delete item.character;
        for(var prop in character) {
            item[prop] = character[prop];
        }
    });
    
    console.log(source);

    【讨论】:

      【解决方案3】:

      您可以使用extend (https://docs.angularjs.org/api/ng/function/angular.extend) 循环和分配:

      for (var i = 0; i < data.length; i++) {
          angular.extend(data[i], data[i].character) //move properties from character to the parent
          delete data[i].character; //delete the "character" key
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-15
        • 2022-01-21
        • 2012-10-05
        • 1970-01-01
        • 2020-06-23
        • 2017-02-22
        • 1970-01-01
        • 2021-10-11
        相关资源
        最近更新 更多