2011-09-02 222 views
0

我想通過傳遞給函數的管道分隔列表進行循環,將其分割爲基於管道的數組作爲分隔符,然後將每個項目分解爲其組成部分,其中所述格式如下:javascript-向數組對象添加屬性

「76:1167 | 76:1168」

,以使陣列將是:surveyQuestions [0] = 76:1167。然後,這將被分成:surveyQuestions [0] .question = 76和surveyQuestions [0] .answer = 1167.

這是我使用的代碼,但值時回來undefined當我嘗試將屬性添加到每個數組項。

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確實添加了一個map函數(如註釋中所述)。調整代碼略高於以包括陣列作爲第一個參數,以$.map()和替代this參數名稱(或result論點一個向右移動,以下index):

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

另外,提問者似乎使用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/

相關問題