당신은이 작업을 수행 할 수 있습니다
let obj = {
a: 'hello',
b: {
b1: 'my',
b2: 'friend',
b3: {
c: 90
}
}
}
function getQueryString(obj, encode) {
function getPathToObj(obj, path = []) {
let result = [];
for (let key in obj) {
if (!obj.hasOwnProperty(key)) return;
//deep copy
let newPath = path.slice();
newPath.push(key);
let everyPath = [];
if (typeof obj[key] === "object") {
everyPath = getPathToObj(obj[key], newPath);
} else {
everyPath.push({
path: newPath,
val: obj[key]
});
}
everyPath.map((item) => result.push(item))
}
return result;
}
function composeQueryString(paths) {
let result = "";
paths.map((item) => {
let pathString = "";
if (item.path.length > 1) {
pathString = item.path.reduce((a, b, index) => {
return a + '['+ b +']';
})
} else {
pathString = item.path[0];
}
if (result) {
pathString = "&" + pathString + '=' + item.val;
} else {
pathString = "?" + pathString + '=' + item.val;
}
result += pathString;
});
return result;
}
const str = composeQueryString(getPathToObj(obj));
return encode === true ? encodeURI(str) : str;
}
console.log(getQueryString(obj, true));
GET : A = 안녕하세요 & ㄴ % 5Bb1 % 5D = 내 & ㄴ % 5Bb2 % 5D = 친구 & ㄴ % 5Bb3 %의 5D을 % 5Bc % 5D = 90
무엇을 의미합니까? 구현을 추가하지 않았습니다. 나는 구현을 요구하고있다. 또한 내가 제공 한 URL이 잘 인코딩되었다고 생각합니다. 다음을보십시오 : http://www.freeformatter.com/url-parser-query-string-splitter.html 그리고 붙여 넣기 URL과 자신을 참조하십시오. –
내가 말하고자하는 것은 여러분이 만들고자하는 구현은 펑키 한 edge-case에주의를 기울이고 적절한 테스트 스위트가있는 기존의 모듈보다 훨씬 더 많이 끝날 확률이 높다는 것입니다. –
오, 그냥 도서관을 사용하는 것입니다. –