我试图将数据存储到javascript变量中。
这是我的情景: 我有一个人员列表(person_id,person_name),每个人都有成功的宠物(pet_id,pet_name)和/或玩具(toys_id)。
[Persons]
Person_Id
Person_Name
[Pets]
Pet_Id
Pet_Name
[Toys]
Toy_Id
我尝试了各种各样的东西,即使有时我能把所有东西都存放起来,我也不确定我是否正确地做到了这一点。
我应该将ID存储为密钥吗?这样做是否正确? 稍后知道我将尝试知道每个人有多少宠物和玩具。此外,我的变量应该存储1个或多个人。
var myVar = {person_id:{
person_name:'',
pet_id:{
pet_name:''
},
toys:{
toys_id:''
}
}};
非常感谢一些帮助。
答案 0 :(得分:1)
我认为最好的方法是将人员存储在数组中
var persons = [
{
person_id:1,
person_name:'per1',
pets:[
{id:1,name:"petname1"},
{id:2,name:"petname2"}
]
,
toys:[{id:1,name:"toyname1"},{id:2,name:"toyname2"}]
}
];
//to find person by id=1
var arr=persons.filter(function(obj){return obj.person_id=1});
alert(arr.length)
if(arr.length>0){
//to find pets length
alert(arr[0].pets.length)
}

答案 1 :(得分:0)
您可以使用如下结构。当id不同时,则无需将它们包装在数组中。
另一个好的想法是将属性简单化为name
而不是pet_name
或toy_name
。
下面是一个如何迭代对象并从对象中获取所有宠物和玩具的示例。
var object = {
p01: {
name: 'Anakin',
pets: {
pet01: {
name: 'Cat'
}
},
toys: {
R2D2: {
name: 'Roboter 1'
},
C3PO: {
name: 'Roboter 2'
}
}
},
'FN-2187': {
name: 'Finn',
pets: {
pet03: {
name: 'Sam'
}
},
toys: {
BB8: {
name: 'Roboter 3'
}
}
}
};
function getItem(type) {
var array = [];
Object.keys(object).forEach(function (k) {
Object.keys(object[k][type]).forEach(function (kk) {
array.push(object[k][type][kk].name + ' (' + kk + ') owned by ' + object[k].name + ' (' + k + ')');
});
});
return array;
}
document.write('<pre>' + JSON.stringify(getItem('pets'), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(getItem('toys'), 0, 4) + '</pre>');
&#13;