2013-09-27 3 views
1

Я пытаюсь назначить значения разделенной строки в глобальный массив объектов. Строка называется результатом и выглядит примерно так: «John.Doe.100.New-Mike.Jordan.200.Veteran-».Как правильно использовать массив объектов

Разделение строки отлично работает, но у меня возникли проблемы с назначением соответствующих значений в массив объектов. который не работает вообще. Любая идея, где проблемы?

var UserData[]=new Object(); 

function SplitDatabase(result){ 
    var RawUsers = result.split('-'); 

    for (var i = 0; i < (RawUsers.length-1); i++) { 
    var tempUserData=RawUsers[i].split('.'); 

    for (var x=0; x < (tempUserData.length);x++){ 

     switch (x) 
      { 
       case 0: 
        UserData[i].firstname=tempUserData[x]; 
         break; 
       case 1: 
         UserData[i].lastname=tempUserData[x]; 
         break; 
       case 2: 
         UserData[i].points=tempUserData[x]; 
         break; 
       case 3: 
         UserData[i].rank=tempUserData[x]; 
         break; 
       } 
      } 

     } 
} 
+2

Первое: что на земле 'вар UserData []'? –

+1

@ Qantas94Heavy - Похоже, что какой-то синтаксис Java проползает. – tymeJV

+1

Просьба описать, что вы имеете в виду, «не работает вообще». Что вы ожидаете ожидать, а что происходит вместо этого? – Philipp

ответ

2

Линия

var UserData[]=new Object(); // <- wrong 

не правильный синтаксис для инициализации пустого массива в JavaScript. Для того, чтобы создать массив, сделайте следующее:

var UserData = []; 

Массивы в JavaScript, являются, как и все остальное, по умолчанию нетипизированного. Они могут хранить что угодно. Чтобы сохранить объект в них, вы должны сначала создать:

var UserDataEntry = {}; 

Затем вы можете назначить свойства этого пустого объекта:

UserDataEntry.firstname = tempUserData[0]; 
UserDataEntry.lastname = tempUserData[1]; 

И тогда вы можете поместить этот новый объект в массив:

UserData.push(UserDataEntry); 

Метод push добавляет его как последний элемент массива.

В качестве альтернативы, вы можете использовать синтаксис JSON и инициализировать объект со свойствами момента ее создания:

var UserDataEntry = { 
    firstname:tempUserData[0],   
    lastname:tempUserData[1], 
    // ... 
}; 

Еще более элегантный способ решения этой проблемы является использование JSON-синтаксис для передачи неназванный объект права UserData.push:

UserData.push({ 
    firstname:tempUserData[0],   
    lastname:tempUserData[1], 
    // ... 
}); 
+0

Хорошо работает, я помещаю UserData.push (UserDataEntry); в конце корпуса3 в коммутаторе. Но нажатие перезаписывает предыдущие объекты в массиве, что для меня не имеет смысла. – dlofrodloh

+0

Вот новый код: http://paste2.org/5a5U73ZH – dlofrodloh

+0

Первое предупреждение показывает правильные данные, когда оно петли, а затем второе предупреждение показывает последнюю запись снова и снова. – dlofrodloh

3

Выпуск 1 - var UserData[]=new Object(); собирается дать вам неприятности. Вместо этого используйте var UserData = [];. Это сродни синтаксису Java, не Javascript.

Выпуск 2 - for (var i = 0; i < (RawUsers.length-1); i++) { ... } не перебирать последний элемент в RawUsers. измените его на for (var i = 0; i < (RawUsers.length); i++) {.

+0

Хорошо, я попробую. Кстати, проблема 2 прекрасна, потому что последняя часть строки - «-», которая возвращает пустого пользователя. Просто мой AJAX. – dlofrodloh

+0

Хорошо, я пробовал решение для проблемы 1 и UserData [i] .firstname = tempUserData [x]; не работает. После этого я поставил предупреждение, и предупреждение не отображается. – dlofrodloh

+0

Какой у вас выход на консоль? Это даст нам лучшее представление о том, что происходит. – Bucket

1

вы должны создать объект в UserData[i] иначе вы не можете прикрепить свойства к нему.

var UserData = []; 

function SplitDatabase(result){ 
    var RawUsers = result.split('-'); 
    for (var i = 0, l = RawUsers.length; i < l; i++) { 
    var tempUserData = RawUsers[i].split('.'); 
    UserData[i] = {}; 
    for (var x=0, xl = tempUserData.length; x < xl; x++) { 
     switch (x) { 
     case 0: 
     UserData[i].firstname=tempUserData[x]; 
     break; 
     case 1: 
     UserData[i].lastname=tempUserData[x]; 
     break; 
     case 2: 
     UserData[i].points=tempUserData[x]; 
     break; 
     case 3: 
     UserData[i].rank=tempUserData[x]; 
     break; 
     } 
    } 
    } 
} 

Fiddle

Смежные вопросы