Jquery Javascript对象 - 将一些值与另一个类似对象进行比较和替换

时间:2015-07-28 19:06:32

标签: javascript jquery arrays ajax json

有一个Javascript对象(formData),我需要通过与另一个对象(dataObject)进行比较来替换一些值。两个对象的JSON如下。现在我需要的是,摘录:

主formData对象:

{
                "name": "abNotes",
                "label": "Ab Notes: (Optional)",
                "type": "TEXT_BOX_SINGLE",
                "value": "Example Notes",
                "active": true
}

我需要通过“name”属性将“value”与其他dataObject进行比较,如果它不同则替换。

要与之比较的dataObject:

{
        "name": "abNotes",
        "value": "Example Notes 123456"
}

因此替换的FormData对象将更改为:

{
                    "name": "abNotes",
                    "label": "Ab Notes: (Optional)",
                    "type": "TEXT_BOX_SINGLE",
                    "value": "Example Notes 123456",
                    "active": true
}

需要更换的主要对象

JSON.stringify (formData);

form data::
{
    "name": "Demo",
    "fieldGroupList": [{
        "name": "instructions",
        "label": "Instructions",
        "fieldList": [{
            "name": "INSTRUCTION",
            "instructionList": [{
                "instructionText": "All enabled fields are required."
            }],
            "type": "INSTRUCTION"
        }]
    },
    {
        "name": "ab",
        "label": "Ab",
        "fieldList": [{
            "name": "abDate",
            "label": "Ab Date",
            "type": "DATE",
            "value": "1425186000000",
            "active": true
        },
        {
            "name": "abNotes",
            "label": "Ab Notes: (Optional)",
            "type": "TEXT_BOX_SINGLE",
            "value": "Example Notes",
            "active": true
        }]
    },
    {
        "name": "Record",
        "label": "Record",
        "fieldList": [{
            "name": "RecordNumber",
            "label": "Record Number: (Optional)",
            "type": "TEXT_BOX_SINGLE",
            "value": "1234567890",
            "active": true
        },
        {
            "name": "otherNumber",
            "label": "Other: (Optional)",
            "type": "TEXT_BOX_SINGLE",
            "value": "887766",
            "active": true
        },
        {
            "name": "eligibleAll",
            "instructionList": [{
                "instructionText": "Is eligible for ALL?"
            }],
            "type": "SINGLE_FROM_SET",
            "value": "true",
            "optionList": [{
                "name": "Yes",
                "value": "true"
            },
            {
                "name": "No",
                "value": "false"
            }],
            "active": true
        },
        {
            "name": "exclusionReasonCode",
            "instructionList": [{
                "instructionText": "Select from the following list of sample:"
            }],
            "type": "SINGLE_FROM_SET",
            "value": "DCS",
            "optionList": [{
                "name": "DCS",
                "value": "Test"
            }],
            "active": true
        }]
    },
    {
        "name": "bDemo",
        "label": "Demo",
        "fieldList": [{
            "name": "mId",
            "label": "M ID:",
            "type": "TEXT_BOX_SINGLE",
            "active": false
        },
        {
            "name": "firstName",
            "label": "First Name:",
            "type": "TEXT_BOX_SINGLE",
            "value": "John",
            "active": true
        },
        {
            "name": "lastName",
            "label": "Last Name",
            "type": "TEXT_BOX_SINGLE",
            "value": "Doe",
            "active": true
        },
        {
            "name": "genderCode",
            "instructionList": [{
                "instructionText": "Gender:"
            }],
            "type": "SINGLE_FROM_SET",
            "optionList": [{
                "name": "FEMALE",
                "value": "FEMALE"
            },
            {
                "name": "MALE",
                "value": "MALE"
            },
            {
                "name": "UNKNOWN",
                "value": "UNKNOWN"
            }],
            "active": true
        },
        {
            "name": "dateOfBirth",
            "label": "Date of Birth:",
            "type": "DATE",
            "value": "-157748400000",
            "active": true
        }]
    },
    {
        "name": "generalComments",
        "label": "General Comments",
        "fieldList": [{
            "name": "comments",
            "label": "Comments: (Optional)",
            "type": "TEXT_BOX_MULTIPLE",
            "value": "Comments Text Example",
            "active": true
        }]
    }],
    "Id": 1,
    "periodId": 2015,
    "orgId": 4,
    "version": 1
}

此对象需要的值:

var dataObject = $('#'+formName).serializeArray();
console.log("data:::"+JSON.stringify(dataObject));

dataObject:::
[{
    "name": "abDate",
    "value": "Sun Mar 01 2015 00:00:00 GMT-0500 (Eastern Standard Time)"
},
{
    "name": "abNotes",
    "value": "Example Notes 123456"
},
{
    "name": "Number",
    "value": "1234567890"
},
{
    "name": "otherNumber",
    "value": "887766"
},
{
    "name": "Yes",
    "value": "true"
},
{
    "name": "No",
    "value": "false"
},
{
    "name": "DCS",
    "value": "Test"
},
{
    "name": "firstName",
    "value": "John"
},
{
    "name": "lastName",
    "value": "Doe"
},
{
    "name": "FEMALE",
    "value": "FEMALE"
},
{
    "name": "MALE",
    "value": "MALE"
},
{
    "name": "UNKNOWN",
    "value": "UNKNOWN"
},
{
    "name": "dateOfBirth",
    "value": "Fri Jan 01 1965 00:00:00 GMT-0500 (Eastern Standard Time)"
},
{
    "name": "comments",
    "value": "Comments Text Example"
}]

修改

到目前为止我尝试过:

  1. $.extend(formData ,dataObject);

  2. deepcopy的:

  3. function deepCopy(src,dest){     var名称,         值,         IsArray的,         toString = Object.prototype.toString;

    // If no `dest`, create one
    if (!dest) {
        isArray = toString.call(src) === "[object Array]";
        if (isArray) {
            dest = [];
            dest.length = src.length;
        }
        else { // You could have lots of checks here for other types of objects
            dest = {};
        }
    }
    
    // Loop through the props
    for (name in src) {
        // If you don't want to copy inherited properties, add a `hasOwnProperty` check here
        // In our case, we only do that for arrays, but it depends on your needs
        if (!isArray || src.hasOwnProperty(name)) {
            value = src[name];
            if (typeof value === "object") {
                // Recurse
                value = deepCopy(value);
            }
            dest[name] = value;
        }
    }
    
    return dest;
    

    }

1 个答案:

答案 0 :(得分:1)

首先,将dataObject从对象数组转换为将名称映射到值的对象。然后浏览主表单数据,替换doHash的相应元素中的值。

var formData = {
  "name": "Demo",
  "fieldGroupList": [{
    "name": "instructions",
    "label": "Instructions",
    "fieldList": [{
      "name": "INSTRUCTION",
      "instructionList": [{
        "instructionText": "All enabled fields are required."
      }],
      "type": "INSTRUCTION"
    }]
  }, {
    "name": "ab",
    "label": "Ab",
    "fieldList": [{
      "name": "abDate",
      "label": "Ab Date",
      "type": "DATE",
      "value": "1425186000000",
      "active": true
    }, {
      "name": "abNotes",
      "label": "Ab Notes: (Optional)",
      "type": "TEXT_BOX_SINGLE",
      "value": "Example Notes",
      "active": true
    }]
  }, {
    "name": "Record",
    "label": "Record",
    "fieldList": [{
      "name": "RecordNumber",
      "label": "Record Number: (Optional)",
      "type": "TEXT_BOX_SINGLE",
      "value": "1234567890",
      "active": true
    }, {
      "name": "otherNumber",
      "label": "Other: (Optional)",
      "type": "TEXT_BOX_SINGLE",
      "value": "887766",
      "active": true
    }, {
      "name": "eligibleAll",
      "instructionList": [{
        "instructionText": "Is eligible for ALL?"
      }],
      "type": "SINGLE_FROM_SET",
      "value": "true",
      "optionList": [{
        "name": "Yes",
        "value": "true"
      }, {
        "name": "No",
        "value": "false"
      }],
      "active": true
    }, {
      "name": "exclusionReasonCode",
      "instructionList": [{
        "instructionText": "Select from the following list of sample:"
      }],
      "type": "SINGLE_FROM_SET",
      "value": "DCS",
      "optionList": [{
        "name": "DCS",
        "value": "Test"
      }],
      "active": true
    }]
  }, {
    "name": "bDemo",
    "label": "Demo",
    "fieldList": [{
      "name": "mId",
      "label": "M ID:",
      "type": "TEXT_BOX_SINGLE",
      "active": false
    }, {
      "name": "firstName",
      "label": "First Name:",
      "type": "TEXT_BOX_SINGLE",
      "value": "John",
      "active": true
    }, {
      "name": "lastName",
      "label": "Last Name",
      "type": "TEXT_BOX_SINGLE",
      "value": "Doe",
      "active": true
    }, {
      "name": "genderCode",
      "instructionList": [{
        "instructionText": "Gender:"
      }],
      "type": "SINGLE_FROM_SET",
      "optionList": [{
        "name": "FEMALE",
        "value": "FEMALE"
      }, {
        "name": "MALE",
        "value": "MALE"
      }, {
        "name": "UNKNOWN",
        "value": "UNKNOWN"
      }],
      "active": true
    }, {
      "name": "dateOfBirth",
      "label": "Date of Birth:",
      "type": "DATE",
      "value": "-157748400000",
      "active": true
    }]
  }, {
    "name": "generalComments",
    "label": "General Comments",
    "fieldList": [{
      "name": "comments",
      "label": "Comments: (Optional)",
      "type": "TEXT_BOX_MULTIPLE",
      "value": "Comments Text Example",
      "active": true
    }]
  }],
  "Id": 1,
  "periodId": 2015,
  "orgId": 4,
  "version": 1
};

var dataObject = [{
  "name": "abDate",
  "value": "Sun Mar 01 2015 00:00:00 GMT-0500 (Eastern Standard Time)"
}, {
  "name": "abNotes",
  "value": "Example Notes 123456"
}, {
  "name": "Number",
  "value": "1234567890"
}, {
  "name": "otherNumber",
  "value": "887766"
}, {
  "name": "Yes",
  "value": "true"
}, {
  "name": "No",
  "value": "false"
}, {
  "name": "DCS",
  "value": "Test"
}, {
  "name": "firstName",
  "value": "John"
}, {
  "name": "lastName",
  "value": "Doe"
}, {
  "name": "FEMALE",
  "value": "FEMALE"
}, {
  "name": "MALE",
  "value": "MALE"
}, {
  "name": "UNKNOWN",
  "value": "UNKNOWN"
}, {
  "name": "dateOfBirth",
  "value": "Fri Jan 01 1965 00:00:00 GMT-0500 (Eastern Standard Time)"
}, {
  "name": "comments",
  "value": "Comments Text Example"
}];

var doHash = {};
$.each(dataObject, function() {
  doHash[this.name] = this.value;
});



$.each(formData.fieldGroupList, function() {
  $.each(this.fieldList, function() {
    if (this.name in doHash) {
      this.value = doHash[this.name];
    }
  });
});

console.log(JSON.stringify(formData));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>