如何正确使用对象数组

时间:2013-09-27 14:21:23

标签: javascript

我正在尝试将拆分字符串的值分配给全局对象数组。该字符串称为结果,看起来像:“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;
              }
          }

      }
}

3 个答案:

答案 0 :(得分: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++) {

答案 1 :(得分: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],
     // ...
});

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