将数据存储到 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_nametoy_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"
    }
}