2011-09-02 167 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/

相关问题