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