최근에는 교육을 이수한 소상공인들이 취업을 위해 많이 나오며 필기시험 문제를 접하기가 어렵다고 합니다. 질문이 있습니다. 많은 사람들이 저에게 요청했습니다. 어떤 질문입니까? 한 번 보자
var str1 = "http://test.com?foo=active@987df&key=123&key=78";
var str2 = "http://test.com?too=last@4567&key=555&value=test";
function show(){}, 함수 show를 캡슐화하자
print show(str1); //결과 반환 {foo:'active',key:[123,78]}
Print show(str2); //결과 반환 {too:'last',key:555,value:'test'}
우선 이 문제를 만났을 때 일련의 배열 문자열 API를 생각하고 문자열을 "?"로 배열로 나눈 다음 다음 부분을 보고 "&"를 사용하여 구분해야 합니다. 결과의 숫자는 문자열이 될 수 없으며 획득한 디지털 문자열을 숫자 유형으로 변환해야 합니다.
한마디로 여기에서 "=" 앞의 키와 값을 배열로 취한 다음 하나씩 추가합니다. 마지막으로 배열의 길이가 1이면 toString()을 사용하고 숫자이면 다음 번호
다른 것 외에도 코드로 이동하겠습니다.
함수 표시(str) {
let s = str.split('?')[1]; //가져오기 foo=active@987df&key=123&key=78
// s를 &로 구분
let arr = s.split("&"); // 배열 가져오기 ['foo=active@987df', 'key=123', 'key=78']
// 키-값 쌍을 담을 빈 객체를 선언합니다.
let obj = {};
// arr을 통해 반복하고 '=' 앞에 있는 각 항목을 키로 개체에 넣은 다음 배열에 넣습니다.
for (let j = 0; j < arr.length; j++) {
let char = arr[j].split("=")[0];
let charV = arr[j].split("=")[1];
if (obj[char] == 정의되지 않음) {
//숫자로 조합
객체[문자] = [];
//@가 있는지 판단 삼항연산자를 이용한 바닥봉인 방식입니다.
obj[char].push(judge(charV) ? charV.split("@")[0] : charV)
} 또 다른 {
obj[문자].푸시(문자V)
}
}
//객체 순회, 값의 길이가 1이면 배열이 아닌 문자열로 변환
for (obj에서 k를 보자) {
if (obj[k].길이 == 1) {
//숫자로의 변환이 NaN이 아닌지 판단
//[555]와 유사
if (!isNaN(Number(obj[k][0]))) {
obj[k] = 숫자(obj[k].toString())
} 또 다른 {
obj[k] = obj[k].toString()
}
} 또 다른 {
for (obj[k]에서 j를 보자) {
if (!isNaN(Number(obj[k][j]))) {
객체[k][j] = 숫자(obj[k][j])
}
}
}
}
객체 반환
}
// 문자열에 @가 있는지 여부를 결정하는 캡슐화 방법
함수 판단(str) {
//새로운 @ES6 문자열이 있는지 여부를 반환합니다.
return str.includes("@");
}
console.log(show(str1));
console.log(show(str2));