1

쿼리 문자열 (예 : ?name=value1&type=value2&name=value3&type=value4...이지만이 코드는 전달 된 모든 쿼리 문자열을 처리 할 수 ​​있어야 함)을 가져와 객체를 생성해야합니다.QueryString 배열을 처리 할 수있는 자바 스크립트 컬렉션 객체

나는이 작업을 거의 완료했습니다. 그러나 내 논리는 마지막 for 루프 내부에서 조금 떨어져 있습니다. 누군가 내가 잘못 간 곳을 지적 할 수 있다면 정말 고맙겠습니다!

먼저 내가 jQuery의 $.get 기능을 사용하여 쿼리 문자열을 잡아 :

$.get("xmlreader.php", function(data) { 

    var queryParams = []; 

    var qString = data; 

    // test qString for & at the end 
    var last = qString.lastIndexOf("&"); 
    if(last == qString.length - 1) { 
     // then there is a & to remove 
     qString = qString.substring(0,qString.length-1); 
    } 

    getParamObj(qString); 

}); 

(나는 그것이 내 자바 스크립트 여기에 마지막 &을 제거하는 것이 펑키 알고하지만 난 전혀 여기에 집중하고 싶지 않아 .) 그럼 실제 컬렉션 개체 구축 getParamObject(qString); 전화

:

function getParamObj(parameterString) { 

var qString = parameterString; 
var parameters = qString.split("&"); 
parameters[0] = parameters[0].substring(1); 

var paramObject = new Object(); 

for(var index = 0; index < parameters.length; ++index) { 
    var equalsPos = parameters[index].indexOf("="); 
    var key = parameters[index].substring(0,equalsPos); 

    var stringLength = parameters[index].length; 

    var value = parameters[index].substring(equalsPos + 1, stringLength); 

    if(!paramObject[key]) { 
     console.log("paramObject[key] = " + paramObject[key]); 
     paramObject[key] = value; 
     if(paramObject[key] instanceof Array) { 
      console.log("instance of array"); 
      paramObject[key].push(value); 
     } else { 
      var newArray = []; 
      var existingValue = paramObject[key]; 
      console.log("existing value: " + existingValue); 
      console.log("value: " + value); 
      newArray.push(existingValue); 
      newArray.push(value); 
      paramObject[key] = newArray; 
     } 

    } 

} 

(SECURITY) 기능을 비활성화를 이온은 올바르게 작용하고 있습니다. 테스트 할 때 몇 가지 잘못된 점이 있습니다 : 마지막 조건부 값 및 값이 동일합니다. 다른 문제도있을 수 있지만 기본 문제라고 생각합니다.

정규 표현식을 사용하는 접근법을 보았지만 여기서 그 경로를 사용하고 싶지 않습니다.

참고 : 나는 스택은 당신 말을하지만 난 그냥 58 담당자 :

[code] 
if(!paramObject[key]) { 
    console.log("paramObject[key] = " + paramObject[key]); 
    paramObject[key] = value; 
    console.log("paramObject[key] = value = " + value + paramObject[key]); 
    console.log(paramObject[key]); 
    } 
    else if(paramObject[key] instanceof Array) { 
    paramObject[key].push(value); 
    console.log("value if arra" + value); 
    } else { 
    var newArray = []; 
    var existingValue = paramObject[key]; 
    console.log("existing value: " + existingValue); 
    console.log("value: " + value); 
    newArray.push(existingValue); 
    newArray.push(value); 
    paramObject[key] = newArray; 
    } 
[/code] 
+1

글쎄,'paramObject [key] = value;와'var existingValue = paramObject [key];'당신은 기본적으로'var existingValue = value'를하고 있습니까? – pimvdb

+0

나는 내 자신의 문제를 해결했다. LOL ... –

+0

고마워 - 미안하지만, '나는 그것을 풀었다'고 말하지 않았다 ... 스택은 내가 대답을 게시하도록하지 않았다. 내 질문에 메모로 추가했습니다. –

답변

2

에서 아직 충분히 냉각 아니에요 때문에 내가이 문제를 언급하지 않습니다 ... LOL 내 자신의 질문에 대답했습니다 정규식 기반 구현을 원하지 않는다, 나는 어떻게 생겼는지 보여 도움이 될 것이라고 생각 :

params = {} 
queryString.replace(/([^&=]+)=([^&=]*)/g, function($0, $1, $2) { 
    (params[$1] = params[$1] || []).push($2); 
}); 
// that's basically all about this 

(따라서, CW를 질문에 대답하지 않습니다).