У меня сложный объект
{
"original": {
"assetName": "2669937-cherry-blossoms-wallpapers.jpg",
"tags": "",
"id": 5834
},
"uploadState": {
"status": 3
},
"file": {
"isThumbnailable": false,
"name": "2669937-cherry-blossoms-wallpapers.jpg",
"tags": []
},
"customFields": [{
"customFormApplicationId": 2014,
"customFieldId": 1017,
"referenceId": 0,
"referenceType": 0,
"label": "qaa",
"orderId": 0,
"type": 1,
"value": "",
"defaultValue": "",
"properties": "MULTILINE:false|WATERMARK_TEXT:",
"dateCreated": "0001-01-01T00:00:00",
"isRequired": true,
"$$hashKey": "object:22760",
"requiredValueSet": false
}, {
"customFormApplicationId": 2014,
"customFieldId": 1018,
"referenceId": 0,
"referenceType": 0,
"label": "ddd",
"orderId": 1,
"type": 3,
"properties": "MULTILINE:true|WATERMARK_TEXT:|VISIBLE_LINES:5|DISPLAY_TYPE:1|DATE_FORMAT:1|TIME_FORMAT:1",
"dateCreated": "0001-01-01T00:00:00",
"isRequired": true,
"$$hashKey": "object:22761",
"isSet": true,
"value": "",
"requiredValueSet": false
}, {
"customFormApplicationId": 2014,
"customFieldId": 2017,
"referenceId": 0,
"referenceType": 0,
"label": "drop",
"orderId": 2,
"type": 2,
"value": "",
"defaultValue": "",
"properties": "MULTILINE:true|WATERMARK_TEXT:|VISIBLE_LINES:5|ITEMS:v1,v2,v3|DISPLAY_TYPE:1",
"dateCreated": "0001-01-01T00:00:00",
"isRequired": false,
"$$hashKey": "object:22762"
}],
"$$hashKey": "object:16951"
}
с динамическими структурами.
Мне нужно глубоко клонировать объект, и я использую этот метод
var clone = $.parseJSON(JSON.stringify(original));
Это единственное, что действительно сработало, поэтому никакой другой метод не может быть использован.
Проблема в том, что объекты Date конвертируются в строку
Так что вместо
"dateCreated": Mon Jan 21 2019 13:45:06 GMT-0500 (Eastern Standard Time)
__proto__: Object,
У меня есть "dateCreated":"2019-01-21T18:45:06.696Z"
Чтобы преобразовать это обратно в дату, я использую
clone.dateCreated = new Date(original.dateCreated )
ПРОБЛЕМА заключается в том, что мой объект очень сложен и обладает динамическими свойствами, поэтому я не знаю структуру объекта.
Мне нужно написать функцию, которая будет работать на исходном объекте, и проверить каждое свойство, а если это свойство типа Date, перейти к клону к тому же свойству и преобразовать эту строку в Date
Как должна выглядеть функция? Две ключевые проблемы:
1 - запустить все свойства исходного объекта и проверить тип
2 - найти то же свойство в объекте клона
учитывая, что они имеют одинаковую структуру
Я использую ES5 и не пользуюсь библиотекой lodash или подчеркиванием