我正在获取XML并解析它,将其保存到数组中,问题是我按此顺序获取对象:
temp1.ID = 15
temp1.name = "Dan"
temp1.phone = "32332"
temp2.ID = 12
temp2.name = "Test"
temp2.phone = 53463
temp3.ID = 2
temp3.name = "Tom"
temp3.phone = 12443
.
.
.
.
Object
- 解析XML
我尝试的是按照我开始阅读它们的顺序保存它们:Array: [temp1,temp2,temp3]
但是下一个函数的结果是:Array: [temp3,temp2,temp1]
功能:
this.mytempect = [];
for (var i = 0; i < xml.length; i++) {
var temp = {};
temp.ID = parseXmlByTag(xml[i], "ID");
temp.name = parseXmlByTag(xml[i], "name");
temp.phone = parseXmlByTag(xml[i], "phone");
if (this.mytempect [temp .ID] == null) {
this.mytempect [temp .ID] = [];
}
this.mytempect [temp .ID].push(obj);
}
在我保存每个对象之前,我会检查是否需要为他创建一个新密钥或添加到现有密钥,最后我会得到这样的结果:
我需要保存我收到它们的顺序,所以我会按照我输入的顺序保存它们
答案 0 :(得分:0)
如果我理解你的问题,我认为你应该做的事情。您似乎混淆了对象和数组:mytempect
如果要根据ID
设置的键存储数组,则需要成为对象。
按照您的示例,具有相同键的对象将按照读取顺序分配给同一个数组(由对象中的该键标识)。
// create an object, not an array
this.mytempect = {};
for (var i = 0; i < arr.length; i++) {
var temp = {};
temp.ID = arr[i].ID;
temp.name = arr[i].name;
temp.phone = arr[i].phone;
// Don't check for null here because `this.mytempect[temp.ID]` might not exist
if (!this.mytempect[temp.ID]) {
this.mytempect[temp.ID] = [];
}
this.mytempect[temp.ID].push(temp);
}
该演示生成一个对象,其中一个对象位于键15
下的数组中,两个位于12
下,另一个位于2
下:
{
"2": [
{
"ID": 2,
"name": "Tom",
"phone": 12443
}
],
"12": [
{
"ID": 12,
"name": "Test",
"phone": 53463
},
{
"ID": 12,
"name": "Test",
"phone": 53462
}
],
"15": [
{
"ID": 15,
"name": "Dan",
"phone": "32332"
}
]
}
注意:您无法以任何方式订购对象。
答案 1 :(得分:0)
也许你正在寻找类似这样的东西
var mytempect = [],
dict = {},
i,
tmp;
for (i = 0; i < xml.length; ++i) {
tmp = {
ID: parseXmlByTag(xml[i], "ID"),
name: parseXmlByTag(xml[i], "name"),
phone: parseXmlByTag(xml[i], "phone")
};
if (!(tmp.ID in dict)) {
mytempect.push(dict[tmp.ID] = []);
}
dict[tmp.ID].push(tmp); // use fact Objects ByRef to add item
}
dict = null; // cleanup
数组 mytempect
现在将包含索引0
,1
,2
等,其中包含数组所有对象具有相同的 ID 。根据您的样本数据,您将获得
mytempect[0][0].ID === 15;
mytempect[1][0].ID === 12;
mytempect[2][0].ID === 2;