양식이 있고이를 ajax 엔드 포인트로 보내고 싶습니다.이 헬퍼 메소드가 있습니다.
$.fn.serializeFormToObject = function() {
//serialize to array
var data = $(this).serializeArray();
//add also disabled items
$(':disabled[name]', this)
.each(function() {
data.push({ name: this.name, value: $(this).val() });
});
//map to object
var obj = {};
data.map(function(x) { obj[x.name] = x.value; });
return obj;
};
문제는 내 양식의 일부 이름에 점 표기법이 있다는 것입니다 (MVC 강력한 유형 모델 사용). 따라서이 개체가 있습니다.
Task.Addresses.Box:""
Task.Addresses.City:"Limal"
Task.Addresses.Country:"Belgique"
Task.Deadline:"1/10/2017 12:18:18 PM"
Task.TaskSourceId:"1"
예상되는 결과는 다음과 같습니다.
{ Task : { Addresses: { Box: "", City: "Limal", Country: "Belgique"}, Deadline: "1/10/2017 12:18:18 PM", TaskSourceId:"1" } }
lodash 라이브러리를 사용하지만 몇 시간 후에 예상 된 결과를 수행하는 방법을 찾을 수 없습니다.
누군가가 예상되는 중첩 개체를 제공하기 위해 작동하는 자바 스크립트 도우미를 제공 할 수 있습니까?
편집 : 중복 질문의 경우 다른 질문은 결합 된 중첩 개체에 대해 묻지 않습니다.
@ ori-drori의 답변 후이 코드는 예상대로 작동합니다.
$.fn.serializeFormToObject = function() {
//serialize to array
var data = $(this).serializeArray();
//add also disabled items
$(':disabled[name]', this)
.each(function() {
data.push({ name: this.name, value: $(this).val() });
});
//map to object
var obj = {};
data.map(function (x) { obj[x.name] = x.value; });
var objNested = {};
_.forEach(obj, function (value, key) { _.set(objNested, key, value) });
return objNested;
};
를 사용하여 데이터를 반복하고 다음을 사용 Array#forEach
하여 경로 (이름)에 값을 할당합니다 _.set()
.
data.forEach(function(x) { _.set(obj, x.name, x.value) });
원본 데이터가 없으므로 제공 한 키-값을 사용한 데모가 있습니다.
var fields = {
"Task.Addresses.Box": "",
"Task.Addresses.City": "Limal",
"Task.Addresses.Country": "Belgique",
"Task.Deadline": "1/10/2017 12:18:18 PM",
"Task.TaskSourceId": "1"
};
var obj = {};
_.forEach(fields, function(value, key) {
_.set(obj, key, value);
});
console.log(obj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다