구조체 배열에서 쿼리로 변환 중이지만 제대로 작동하지만 배열 및 중첩 구조가있는 경우 변경된 데이터로 쿼리를 가져 오기 위해 함수에서 수정해야하는 내용이 조금 손실되었습니다.
다음 코드가 있습니다.
<cfscript>
data = [
{"1" :
{ i: 1, label: "One" }
},
{"2" :{ i: 2, label: "Two", foo: "Foo" }},
{"3" :{ i: 3, label: "Three", bar: "Bar" }},
{"4" :{ i: 4, label: "Four", foo: "Foo", bar: "Bar" }}
];
function stackoverflow(data) {
return data.reduce(function(accumulator, element) {
element.each(function(key) {
if (!accumulator.keyExists(key)) {
accumulator.addColumn(key, []);
}
});
accumulator.addRow(element);
return accumulator;
}, QueryNew(""));
}
writeDump(data); abort;
writeDump(arrayToQuery(data));
</cfscript>
위의 작업은 간단한 ArrayofStructs이면 작동하지만 구조 수준을 추가하자마자 작동이 중지됩니다.
먼저 중첩 된 배열을 더 간단한 배열 형식으로 포맷 한 다음 다음과 같이 줄이십시오. 항상 더 나은 솔루션이 있지만 모두 앱에있는 비즈니스 로직에 따라 다릅니다.
<cfscript>
data = [
{"1" :{ i: 1, label: "One" }},
{"2" :{ i: 2, label: "Two", foo: "Foo" }},
{"3" :{ i: 3, label: "Three", bar: "Bar" }},
{"4" :{ i: 4, label: "Four", foo: "Foo", bar: "Bar" }}
];
function arrayToQuery(data) {
return data.map(function(datum, index){
return datum[index];
}).reduce(
function(accumulator, element) {
element.each(function(key) {
if (!accumulator.keyExists(key)) {
accumulator.addColumn(key, []);
}
});
accumulator.addRow(element);
return accumulator;
},
QueryNew("")
);
}
writeDump(data);
writeDump(arrayToQuery(data));
</cfscript>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다