如何在 Javascript 中将嵌套对象合并到它们的父对象中

How to merge nested objects into their parents in Javascript?

本文关键字:对象 合并 嵌套 Javascript      更新时间:2023-09-26

我正在尝试在 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(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
}

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

使用

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
}