javascript - добавление свойств к объектам массива - PullRequest
0 голосов
/ 03 сентября 2011

Я пытаюсь перебрать список разделенных конвейерами, переданный функции, разделить его на массив на основе канала в качестве разделителя, а затем разбить каждый элемент на составные части, где формат выглядит следующим образом :

"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 ]

3 голосов
/ 03 сентября 2011

Вы пытаетесь добавить свойство в строку, что вы не можете сделать.Если вы хотите, чтобы массив содержал список объектов, используйте Array.map() для преобразования ваших строк в объекты:

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

Он включен в большинство браузеров, но для более старых версий некоторых браузеров вынеобходимо добавить .map() вручную .

Редактировать: 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 голос
/ 03 сентября 2011

Попробуйте это:

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');
0 голосов
/ 03 сентября 2011

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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...