【问题标题】:Javascript how to add and remove JSON element which is on 2 level deepJavascript 如何添加和删除 2 级深度的 JSON 元素
【发布时间】:2018-03-17 20:06:52
【问题描述】:

我搜索了很多关于如何从我的 JSON 对象中删除元素的问题。

这是我的简化 JSON 来说明我的要求。

捆绑:

{
    "resourceType": "Bundle",
    "meta": {
        "lastUpdated": "2017-10-06T04:42:22.411Z"
    },
    "type": "searchset",
    "total": "0",
    "entry": [
        {
            "_id": "59d5739e668e9e3fd29aeb0d",
            "resource": {
                "id": "59d5739e668e9e3fd29aeb0d"
            },
            "__v": 0
        },
        {
            "_id": "59d6a3fae4b45d50c5ffd4f7",
            "resource": {
                "id": "59d6a3fae4b45d50c5ffd4f7"
            },
            "__v": 0
        },
        {
            "_id": "59d6a831e4b45d50c5ffd4fa",
            "resource": {
                "id": "59d6a831e4b45d50c5ffd4fa"
            },
            "__v": 0
        }
    ]
}

如何删除所有 entry._id 和 entry.__v? 我试过这些,但没有用。

delete bundle.meta;   <-- meta is on level 1, it works.
delete bundle.entry._id; <-- not working. The _id under entry
delete bundle.__v; <-- not working. The __v is also under entry

如何在每个条目下添加一个新元素,例如下面的“全名”

我想要的结果 - 删除“_id”和“__v”,然后将“全名”添加到条目[]:

{
    "resourceType": "Bundle",
    "meta": {
        "lastUpdated": "2017-10-06T04:42:22.411Z"
    },
    "type": "searchset",
    "total": "0",
    "entry": [
        {
            "fullname": "Apple",
            "resource": {
                "id": "59d5739e668e9e3fd29aeb0d",
            }
        },
        {
            "fullname": "Orange",
            "resource": {
                "id": "59d6a3fae4b45d50c5ffd4f7"
            },
        }, ......

我尝试了很多方法并在 Google 上搜索了很多。感谢您的帮助!


感谢 Vivek 的回答。它有效。

for (var i = 0; i < bundle.entry.length; i++) {
    delete bundle.entry[i]._id;
    delete bundle.entry[i].__v;
    bundle.entry[i].fullname = "Test";
}

【问题讨论】:

  • “我想要的结果-删除'_id'和'__v',然后将'fullname'添加到条目[]”"fullname"属性值是如何确定的?
  • 您无法从JSON object 中删除元素...
  • 嗨 guest271314,假设 entry[i].fullname = entry[i].resource.id 的最后 4 位;感谢您的帮助。

标签: javascript json node.js angular


【解决方案1】:

请尝试以下代码。经测试可以帮到你。

  var object1 = {
    "resourceType": "Bundle",
    "meta": {
        "lastUpdated": "2017-10-06T04:42:22.411Z"
    },
    "type": "searchset",
    "total": "0",
    "entry": [
        {
            "_id": "59d5739e668e9e3fd29aeb0d",
            "resource": {
                "id": "59d5739e668e9e3fd29aeb0d",
            },
            "__v": 0
        },
        {
            "_id": "59d6a3fae4b45d50c5ffd4f7",
            "resource": {
                "id": "59d6a3fae4b45d50c5ffd4f7"
            },
            "__v": 0
        },
        {
            "_id": "59d6a831e4b45d50c5ffd4fa",
            "resource": {
                "id": "59d6a831e4b45d50c5ffd4fa"
            },
            "__v": 0
        }
    ]
  };

  var array1=['Apple','Orange','Gava']

  function a(){
        for(var i=0;i<object1.entry.length;i++){
            delete object1.entry[i]._id;
            delete object1.entry[i].__v;
            object1.entry[i].fullname = array1[i];
        }
        console.log(object);
  }

【讨论】:

    【解决方案2】:

    您可以使用map函数从对象中移除键,并在同一个函数中添加键,如下所示:

    var data = {
        "resourceType": "Bundle",
        "meta": {
            "lastUpdated": "2017-10-06T04:42:22.411Z"
        },
        "type": "searchset",
        "total": "0",
        "entry": [
            {
                "_id": "59d5739e668e9e3fd29aeb0d",
                "resource": {
                    "id": "59d5739e668e9e3fd29aeb0d"
                },
                "__v": 0
            },
            {
                "_id": "59d6a3fae4b45d50c5ffd4f7",
                "resource": {
                    "id": "59d6a3fae4b45d50c5ffd4f7"
                },
                "__v": 0
            },
            {
                "_id": "59d6a831e4b45d50c5ffd4fa",
                "resource": {
                    "id": "59d6a831e4b45d50c5ffd4fa"
                },
                "__v": 0
            }
        ]
    }
    var names = ['A','B','C'];
    var counter = 0;
    data.entry = data.entry.map(function(obj){
        delete obj['_id']
        delete obj['__v']
        obj.fullname = names[counter]
        counter++ ;
        return obj
    });
    
    console.log(data);

    【讨论】:

      【解决方案3】:
      const fullNameList = ['Apple', 'Orange', 'Guava']
      delete bundle.meta
      bundle.entry = bundle.entry.map((item, index) => {
          const {__v, _id, ...restObj } = item;
          restObj.fullname = fullNameList[index]
          return restObj;
      })
      

      注意fullNameList 的长度和bundle.entry 的长度必须相同

      【讨论】:

        【解决方案4】:

        bundle.entry 是一个数组。 :)
        删除第一个元素的 _id:
        delete bundle.entry[0]._id
        删除所有元素的 _id 和 __v:
        bundle.entry = bundle.entry.map(function(entry){ var newEntry = { resource: entry.resource, fullname: "fullname here" }; return newEntry; });

        【讨论】:

        • 这将在每个条目中添加相同的fullname。这是不想要的
        猜你喜欢
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 2021-08-21
        • 1970-01-01
        相关资源
        最近更新 更多