javascript - 向数组对象添加属性

时间:2011-09-02 22:01:03

标签: javascript jquery arrays properties

我正在尝试遍历传递给函数的管道分隔列表,将其拆分为基于管道作为分隔符的数组,然后将每个项目分解为其组成部分,其格式如下:

“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 个答案:

答案 0 :(得分:3)

您正在尝试向字符串添加属性,但您无法执行此操作。如果希望Array包含对象列表,请使用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()的第一个参数,并用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]
    };
});

答案 1 :(得分: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 :(得分: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/