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;
              }
          }

      }
}
4

3 に答える 3

3

問題 1 -問題var UserData[]=new Object();が発生します。var UserData = [];代わりに使用してください。これは、 Javascriptではなく、Java 構文に似ています。

問題 2 -for (var i = 0; i < (RawUsers.length-1); i++) { ... }の最後の要素を反復処理しませんRawUsers。彼を に変更しfor (var i = 0; i < (RawUsers.length); i++) {ます。

于 2013-09-27T14:25:46.973 に答える
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],
     // ...
});
于 2013-09-27T14:31:00.827 に答える
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;
      }
    }
  }
}

フィドル

于 2013-09-27T14:35:58.180 に答える