将数据存储到 javascript 变量中
Store data into a javascript variable
我正在尝试将数据存储到 javascript 变量中。
这是我的场景:
我有一个人的名单(person_id,person_name),每个人都可以养宠物(pet_id,pet_name)and/or玩具(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:''
}
}};
非常感谢您的帮助。
我认为最好的方法是将人员存储在数组中
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)
}
您可以使用如下结构。当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>');
我认为这取决于您打算如何使用人员集合。保留一个人对象数组意味着修改一个人涉及在数组中找到这个人,将这个人从数组中拼接出来,进行修改,然后将它们插入回来。如果个人很少被修改,那么数组可能适合。
但是,如果您要经常修改个人对象,那么将它们存储为对象的属性可能会更简单。
例如
var people = {
person_id1: {
person_id: "person_id1",
person_name: "person_name1",
pets: [
{
pet_id: "pet_id1",
pet_name: "pet_name1"
},
{
pet_id: "pet_id2",
pet_name: "pet_name2"
}
],
toys: []
},
person_id2: {
person_id: "person_id2",
person_name: "person_name2",
pets: [],
toys: [
{
toy_id: "toy_id1",
toy_name: "toy_name1"
}
]
}
};
这将允许您修改任何知道其 ID 的人。
people["person_id1"].toys.push({toy_id: "toy_id2", toy_name: "toy_name2"});
或
people.person_id1.toys.push({toy_id: "toy_id2", toy_name: "toy_name2"});
有些场景需要重复列表中的元素,因此将 ID 存储为键不让这个实现。但如果仍然决定使用 ID 作为键,也将 ID 作为值:
{
"123":
{
"ID": 123,
"Name": "some name"
}
}
我正在尝试将数据存储到 javascript 变量中。
这是我的场景: 我有一个人的名单(person_id,person_name),每个人都可以养宠物(pet_id,pet_name)and/or玩具(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:''
}
}};
非常感谢您的帮助。
我认为最好的方法是将人员存储在数组中
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)
}
您可以使用如下结构。当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>');
我认为这取决于您打算如何使用人员集合。保留一个人对象数组意味着修改一个人涉及在数组中找到这个人,将这个人从数组中拼接出来,进行修改,然后将它们插入回来。如果个人很少被修改,那么数组可能适合。
但是,如果您要经常修改个人对象,那么将它们存储为对象的属性可能会更简单。 例如
var people = {
person_id1: {
person_id: "person_id1",
person_name: "person_name1",
pets: [
{
pet_id: "pet_id1",
pet_name: "pet_name1"
},
{
pet_id: "pet_id2",
pet_name: "pet_name2"
}
],
toys: []
},
person_id2: {
person_id: "person_id2",
person_name: "person_name2",
pets: [],
toys: [
{
toy_id: "toy_id1",
toy_name: "toy_name1"
}
]
}
};
这将允许您修改任何知道其 ID 的人。
people["person_id1"].toys.push({toy_id: "toy_id2", toy_name: "toy_name2"});
或
people.person_id1.toys.push({toy_id: "toy_id2", toy_name: "toy_name2"});
有些场景需要重复列表中的元素,因此将 ID 存储为键不让这个实现。但如果仍然决定使用 ID 作为键,也将 ID 作为值:
{
"123":
{
"ID": 123,
"Name": "some name"
}
}