2011-09-02 4 views
0

함수에 전달 된 파이프 구분 목록을 반복하고 파이프를 구분 기호로 사용하여 배열로 분할 한 다음 각 항목을 해당 구성 요소 부분으로 분리합니다. 다음 형식이고 같이javascript - 배열 객체에 속성 추가

"76 : 1167 | 76 : 1168"

그렇게 배열 될 것이다 : surveyQuestions [0] = 76 : 1167. 그런 다음 surveyQuestions [0] .question = 76 및 surveyQuestions [0] .answer = 1167로 분할됩니다.

그리고이 코드는 사용하고 있지만 시도 할 때 값은 정의되지 않았습니다. 각 배열 항목에 속성을 추가합니다.

function answerSurvey(survey){ 

var surveyResults = survey.split("|"); 

for (var i=0;i<surveyResults.length;i++){ 

    var surveyResult = surveyResults[i].split(":"); 
    var surveyQ = surveyResult[0]; 
    var surveyA = surveyResult[1]; 
    surveyResults[i].surveyQ = surveyQ; 
    surveyResults[i].surveyA = surveyA; 
    console.log(surveyResults[i].surveyQ + "|" + surveyResults[i].surveyA) 
} 

} 

answerSurvey("76:1167|76:1168"); 

답변

3

. 당신이 배열은 객체의 목록을 포함 할 경우, 객체로 문자열을 변환하는 Array.map()를 사용

var surveyResults = survey.split("|").map(function (result) { 
    var parts = result.split(":"); 
    return { 
     question: parts[0], 
     answer: parts[1] 
    }; 
}); 

이 포함되어 대부분의 브라우저에서,하지만 일부 브라우저의 이전 버전을 위해, 당신은 add .map() manually해야합니다.

편집 : jQuery는 (주석에 언급 된대로) 맵 기능을 추가합니다. (index 다음 또는 오른쪽 result 인수를 시프트) $.map() 첫 번째 매개 변수로 배열을 포함하는 상기 약간 코드를 조정하고 this의 인수 이름을 대체 :

var surveyResults = $.map(survey.split("|"), function (i, result) { 
    var parts = result.split(":"); // or this.split(":") 
    return { 
     question: parts[0], 
     answer: parts[1] 
    }; 
}); 
+2

또한 asker는 브라우저 간 구현을 제공하는 jQuery를 사용하는 것으로 보입니다 :'$ .map (array, function)' –

+0

감사합니다 Jens - 아마도 그렇게 할 것입니다 – mheavers

+0

좋은 관찰! 나는 그것을 놓쳤다. – gilly3

1

이 시도 : 당신은 당신이 할 수없는 문자열에 속성을 추가하려고

function answerSurvey(survey){ 

var surveyResults = survey.split("|"); 

for (var i=0;i<surveyResults.length;i++){ 

    var surveyResult = surveyResults[i].split(":"); 
    var surveyQ = surveyResult[0]; 
    var surveyA = surveyResult[1]; 
    surveyResults[i] = {}; 
    surveyResults[i].surveyQ = surveyQ; 
    surveyResults[i].surveyA = surveyA; 
    console.log(surveyResults[i].surveyQ + "|" + surveyResults[i].surveyA) 
} 

} 

answerSurvey('76:1167|76:1168'); 
+2

Corret합니다. OP와의 유일한 차이점을 지적하기 위해 surveyResults [i]를 객체 ({})로 선언합니다. 또한 answerSurvey 인수에는 따옴표가 필요합니다. – maxedison

0

surveyResults[i]은 "문자열"인 객체가 아니므로 속성을 추가 할 수 없습니다.

이 시도 :

var surveyQ = surveyResult[0]; 
var surveyA = surveyResult[1]; 
surveyResults[i] = {}; 
surveyResults[i].surveyQ = surveyQ; 
surveyResults[i].surveyA = surveyA; 

예 : http://jsfiddle.net/Paulpro/WeJxe/