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

标签 javascript jquery arrays ajax json

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

主表单数据对象:

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

我需要通过“名称”属性将“值”与其他数据对象进行比较,如果不同则进行替换。

要比较的数据对象:

{
        "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(src, dest) { 变量名称, 值(value), 是数组, 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;

}

最佳答案

首先,将 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>

关于javascript - Jquery Javascript 对象 - 将某些值与另一个类似对象进行比较并替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31685076/

相关文章:

arrays - CakePhp foreach 仅保存数组中的最后一个值

javascript - 为什么 res.redirect 实际上没有重定向我?

javascript - jQuery $(document).ready() 在 IE6 中失败,但仅在清除临时 Internet 文件后才失败

javascript - 获取 ng-repeat 中选定复选框的值

javascript - jQuery 在选择一个选项时显示一个文本框

php - 通过 ajax 到 PHP 的多维数组

java - 搜索数组的问题

签名中带有数组类型的 ccall 从 Julia 调用 C 中的结构

javascript - 在文本文件中将数组数据存储为字符串的最佳方法?

Javascript 嵌套 for 循环不起作用