【问题标题】:Copying AJAX JSON object into existing Object将 AJAX JSON 对象复制到现有对象中
【发布时间】:2013-04-28 17:07:40
【问题描述】:

我有几个 Javascript 原型。最初,实例将仅填写 ID,并带有一些用于其他数据的通用占位符信息。然后,我向服务器发送一条带有 ID 和对象类型的消息(使用 jQuery 的 AJAX 函数),服务器返回一个带有所有缺失信息(但没有 ID)的 JSON 对象。返回对象中的变量与现有对象中的变量名称完全相同。

将它转移到现有的空对象中的最简单方法是什么?我想出了一些替代方案

  • 将对象设置为等于返回的对象,然后复制 id(丢失原型函数?)
  • 为每个对象创建一个函数,获取具有相同结构的对象并复制数据
  • 遍历 JSON 对象的键值对并将其复制到现有对象中

如果我使用第三个选项,这是正确的方法吗? :

for (var key in json) {
    if (object.hasOwnProperty(key)) {
        object[key] = json[key];
    }
}

假设json 是返回的对象,object 是现有对象。

【问题讨论】:

  • 如果 json 是纯 JSON,那么我认为您甚至不需要 hasOwnProperty 检查。除非有人一直在嘲笑Object.prototype
  • 问题是,你想用你的 JSON 对象做什么。如果您想评估一个对象,JSON.parse() 可以为您解决问题。如果要将其合并到现有对象,jQuery.extend() 会是一个更好的建议。
  • @PaulGrime 我这样做是为了预防,以防json 对象中存在我不想要的现有object 中的额外键。如果您注意到,我正在循环访问 json 中的键,但会检查 object

标签: javascript jquery ajax json


【解决方案1】:

extend()试试这个:

var newObject = jQuery.extend({}, oldObject);

【讨论】:

  • 听起来很完美!我根本不知道这个功能。而且因为它合并了所有属性,所以我所做的任何继承仍然会保留,对吗?
【解决方案2】:

没有 jQuery 的替代方法是使用 javascript Object.assign 方法。

Object.assign(targetObject, json);

【讨论】:

    【解决方案3】:

    你可以使用jQuery.extend:http://api.jquery.com/jQuery.extend/

    $.extend(object1,object2);
    

    如果您的 JSON 是一个字符串,则首先从该字符串创建一个对象:

    var object1=$.parseJSON(myJsonString);
    

    【讨论】:

    • 不需要 Methodcall parseJSON(),因此现在每个人都可以使用 JSON.parse()。 jQuery 什么都不做: if (window.JSON && window.JSON.parse) { return window.JSON.parse(data); }
    • 但如果 window.JSON.parse 为假,它会做得更多。
    • 但是window.JSON.parse今天不会失败
    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多