jquery从循环推入多维数组

jquery从循环推入多维数组,jquery,for-loop,multidimensional-array,Jquery,For Loop,Multidimensional Array,我正在尝试通过执行以下操作在for循环中创建一个数组: var newArr = []; for(var j=0; j < ChargeTypes.ChargeType.length; j++){ var ChargeTypeId = ChargeTypes.ChargeType[j].ChargeTypeId; var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date; var NoOfR

我正在尝试通过执行以下操作在for循环中创建一个数组:

var newArr = [];
for(var j=0; j < ChargeTypes.ChargeType.length; j++){
    var ChargeTypeId = ChargeTypes.ChargeType[j].ChargeTypeId;
    var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date;
    var NoOfRoomsAvailable = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].NoOfRoomsAvailable;
    newArr.push({ChargeTypeId},{Date});
    newArr.push({ChargeTypeId},{NoOfRoomsAvailable});
};
alert( JSON.stringify(newArr) );
var newArr = [];
for(var j=0; j < ChargeTypes.ChargeType.length; j++){
    var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date;
    var NoOfRoomsAvailable = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].NoOfRoomsAvailable;
    newArr.push({ChargeTypeId,Date,NoOfRoomsAvailable});
};
但我希望得到这样的东西:

[1] //ChargeTypeID
    {
        Date:"2017-12-28",
        NoOfRoomsAvailable:"0"
    },
[23] //ChargeTypeID
    {
        Date:"2017-12-28",
        NoOfRoomsAvailable:"3"
    }
var newArr = [];

for(var j = 0; j < ChargeTypes.ChargeType.length; j++){
    var chargeType = ChargeTypes.ChargeType[j];
    var chargeAttribute = chargeType.Charge[0]['@attributes'];
    var chargeDetails = {
        ChargeTypeId : chargeType.ChargeTypeId,
        Date : chargeAttribute.Date,
        NoOfRoomsAvailable : chargeAttribute.NoOfRoomsAvailable
    };

    newArr.push(chargeDetails);
};
我试过用这个:

newArr[ChargeTypeId].push("Date",Date);
newArr[ChargeTypeId].push("NoOfRoomsAvailable",NoOfRoomsAvailable);
但我得到了这个错误:

TypeError:newArr[ChargeTypeId]未定义

很明显,我遗漏了一些东西,可能是一些小东西,哈哈,但如果有人能帮我,那就太棒了。

这应该行得通

var newArr = [];
for(var j=0; j < ChargeTypes.ChargeType.length; j++){
    var ChargeTypeId = ChargeTypes.ChargeType[j].ChargeTypeId;
    var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date;
    var NoOfRoomsAvailable = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].NoOfRoomsAvailable;
    newArr[parseInt(ChargeTypeId)] = {
        "Date": Date,
        "NoOfRoomsAvailable": NoOfRoomsAvailable 
    };
};
var newArr=[];
对于(var j=0;j
这应该行得通

var newArr = [];
for(var j=0; j < ChargeTypes.ChargeType.length; j++){
    var ChargeTypeId = ChargeTypes.ChargeType[j].ChargeTypeId;
    var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date;
    var NoOfRoomsAvailable = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].NoOfRoomsAvailable;
    newArr[parseInt(ChargeTypeId)] = {
        "Date": Date,
        "NoOfRoomsAvailable": NoOfRoomsAvailable 
    };
};
var newArr=[];
对于(var j=0;j
您只需创建
ChargeTypeId
新数组
,即可进行推送。因为当前未找到
newArr[ChargeTypeId]
,所以它会给您带来错误。添加
newArr[ChargeTypeId]=[]推之前

试试这个:

var newArr = [];
for(var j=0; j < ChargeTypes.ChargeType.length; j++){
    var ChargeTypeId = ChargeTypes.ChargeType[j].ChargeTypeId;
    var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date;
    var NoOfRoomsAvailable = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].NoOfRoomsAvailable;
    newArr[ChargeTypeId] = [];
    newArr.push({ChargeTypeId},{Date});
    newArr.push({ChargeTypeId},{NoOfRoomsAvailable});
};
alert( JSON.stringify(newArr) );
var newArr=[];
对于(var j=0;j
您只需创建
ChargeTypeId
新数组
,即可进行推送。因为当前未找到
newArr[ChargeTypeId]
,所以它会给您带来错误。添加
newArr[ChargeTypeId]=[]推之前

试试这个:

var newArr = [];
for(var j=0; j < ChargeTypes.ChargeType.length; j++){
    var ChargeTypeId = ChargeTypes.ChargeType[j].ChargeTypeId;
    var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date;
    var NoOfRoomsAvailable = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].NoOfRoomsAvailable;
    newArr[ChargeTypeId] = [];
    newArr.push({ChargeTypeId},{Date});
    newArr.push({ChargeTypeId},{NoOfRoomsAvailable});
};
alert( JSON.stringify(newArr) );
var newArr=[];
对于(var j=0;j
只需在(平面)数组的末尾添加一个值。将多个参数传递到
push
不会在数组中引入额外的级别。同样,数组索引也是纯数字的,并且是顺序的,从0开始。如果您有自定义的稀疏ID(在您的情况下也是字符串),则不能将它们用作索引来检索/存储数组中的值

相反,请尝试以下方法:

[1] //ChargeTypeID
    {
        Date:"2017-12-28",
        NoOfRoomsAvailable:"0"
    },
[23] //ChargeTypeID
    {
        Date:"2017-12-28",
        NoOfRoomsAvailable:"3"
    }
var newArr = [];

for(var j = 0; j < ChargeTypes.ChargeType.length; j++){
    var chargeType = ChargeTypes.ChargeType[j];
    var chargeAttribute = chargeType.Charge[0]['@attributes'];
    var chargeDetails = {
        ChargeTypeId : chargeType.ChargeTypeId,
        Date : chargeAttribute.Date,
        NoOfRoomsAvailable : chargeAttribute.NoOfRoomsAvailable
    };

    newArr.push(chargeDetails);
};
只需在(平面)数组的末尾添加一个值。将多个参数传递到
push
不会在数组中引入额外的级别。同样,数组索引也是纯数字的,并且是顺序的,从0开始。如果您有自定义的稀疏ID(在您的情况下也是字符串),则不能将它们用作索引来检索/存储数组中的值

相反,请尝试以下方法:

[1] //ChargeTypeID
    {
        Date:"2017-12-28",
        NoOfRoomsAvailable:"0"
    },
[23] //ChargeTypeID
    {
        Date:"2017-12-28",
        NoOfRoomsAvailable:"3"
    }
var newArr = [];

for(var j = 0; j < ChargeTypes.ChargeType.length; j++){
    var chargeType = ChargeTypes.ChargeType[j];
    var chargeAttribute = chargeType.Charge[0]['@attributes'];
    var chargeDetails = {
        ChargeTypeId : chargeType.ChargeTypeId,
        Date : chargeAttribute.Date,
        NoOfRoomsAvailable : chargeAttribute.NoOfRoomsAvailable
    };

    newArr.push(chargeDetails);
};

您所面临的问题是,JS不像其他一些语言那样支持关联数组。相反,JS有对象,你必须接受它。此时,您可以做的最好的事情是创建:

$obj = [
    {"ChargeTypeId":"1", "Date":"2017-12-28", "NoOfRoomsAvailable":"0"},
    {"ChargeTypeId":"23", "Date":"2017-12-28", "NoOfRoomsAvailable":"3"}
]
然后您可以引用ID作为
obj.ChargeTypeId
。这可以通过以下方式实现:

var newArr = [];
for(var j=0; j < ChargeTypes.ChargeType.length; j++){
    var ChargeTypeId = ChargeTypes.ChargeType[j].ChargeTypeId;
    var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date;
    var NoOfRoomsAvailable = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].NoOfRoomsAvailable;
    newArr.push({ChargeTypeId},{Date});
    newArr.push({ChargeTypeId},{NoOfRoomsAvailable});
};
alert( JSON.stringify(newArr) );
var newArr = [];
for(var j=0; j < ChargeTypes.ChargeType.length; j++){
    var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date;
    var NoOfRoomsAvailable = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].NoOfRoomsAvailable;
    newArr.push({ChargeTypeId,Date,NoOfRoomsAvailable});
};
var newArr=[];
对于(var j=0;j
您面临的问题是,JS不象其他一些语言那样支持关联数组。相反,JS有对象,你必须接受它。此时,您可以做的最好的事情是创建:

$obj = [
    {"ChargeTypeId":"1", "Date":"2017-12-28", "NoOfRoomsAvailable":"0"},
    {"ChargeTypeId":"23", "Date":"2017-12-28", "NoOfRoomsAvailable":"3"}
]
然后您可以引用ID作为
obj.ChargeTypeId
。这可以通过以下方式实现:

var newArr = [];
for(var j=0; j < ChargeTypes.ChargeType.length; j++){
    var ChargeTypeId = ChargeTypes.ChargeType[j].ChargeTypeId;
    var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date;
    var NoOfRoomsAvailable = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].NoOfRoomsAvailable;
    newArr.push({ChargeTypeId},{Date});
    newArr.push({ChargeTypeId},{NoOfRoomsAvailable});
};
alert( JSON.stringify(newArr) );
var newArr = [];
for(var j=0; j < ChargeTypes.ChargeType.length; j++){
    var Date = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].Date;
    var NoOfRoomsAvailable = ChargeTypes.ChargeType[j].Charge[0]['@attributes'].NoOfRoomsAvailable;
    newArr.push({ChargeTypeId,Date,NoOfRoomsAvailable});
};
var newArr=[];
对于(var j=0;j
我需要ChargeTypeId作为数组项的键(1或23):)我得到了以下信息:[null,{“日期”:“2017-12-28”,“NoOfRoomsAvailable”:“0”},null,null,null,null,null,null,null,null,null,null,null,null,null,null,{“日期”:“2017-12-28”,“NoOfRoomsAvailable”:“3”}如果将数组推到特定索引,然后中间的元素将是未定义的/null。如果需要,可以采用如下结构{“1”:{Date:“2017-12-28”,noofromsavable:“0”},23:{Date:“2017-12-28”,noofromsavable:“3”}Javascript中的数组不会以这种方式工作。JS不支持关联数组,您必须使用JS中的对象。请参阅下面的nbrooks'或我的答案。我需要ChargeTypeId作为数组项的键(1或23):)我得到了以下信息:[null,{“日期”:“2017-12-28”,“NoOfRoomsAvailable”:“0”},null,null,null,null,null,null,null,null,null,null,null,null,null,null,null