存储此数据的最佳方式(数组,对象等)

时间:2014-04-08 09:03:52

标签: javascript jquery arrays object

我需要存储(许多)对象或数据数组,这些数据需要具有以下条件:

我需要能够轻松地将一组新数据添加到现有数据中

我需要能够按照添加的日期/时间对数据进行排序(按照按条目的顺序排列数组)

我需要能够使用引用(整数或字符串)轻松获取条目。这很重要,目前我必须使用$ .each()来遍历我的数据,直到找到我想要的条目。

我尝试过使用像

这样的结构
saved_info = {
    1001: {//all my data for ref 1001},
    1002: {//all my data for ref 1002}
}

给了我一些想要能够轻松获取信息的信息:

info = saved_info[1001];

但是,我使用的参考号码不按顺序排列 - 我使用了给我的参考(它是唯一的标识符),因此对象不是按照添加/保存项目的顺序排列的推压。

2 个答案:

答案 0 :(得分:2)

尝试像这样构建一个Json,

var xJson = {
    "1001":{//all my data for ref 1001},
    "1002":{//all my data for ref 1002}
};

您可以使用括号表示法按照您的意愿获取记录,因为我们使用数值作为键。

var xData = xJson["1001"];

答案 1 :(得分:1)

您可以使用两个对象:

  • 按密钥存储数据
  • 存储排序顺序的另一个

这样你就可以(i)按键查找元素(ii)按照插入顺序循环元素。粗略的结构轮廓:

var DataObject = {
    data: {},
    sort: []
};

以下是向此结构添加数据的方法:

DataObject.data[1004] = {name: "Test 4"};
DataObject.sort.push(1004);

DataObject.data[1001] = {name: "Test 1"};
DataObject.sort.push(1001);

DataObject.data[1003] = {name: "Test 3"};
DataObject.sort.push(1003);

DataObject.data[1002] = {name: "Test 2"};
DataObject.sort.push(1002);

以下是您执行随机访问的方式:

console.log(DataObject.data[1001].name);
console.log(DataObject.data[1003].name);

以下是按照添加顺序迭代所有元素的方法:

var i;
for (i = 0; i < DataObject.sort.length; i++) {
    console.log(DataObject.data[DataObject.sort[i]].name);
}

可以将整个逻辑包装在一个类中:

function DataObject() {
    this.data = {};
    this.sort = [];
    this.setItem = function (k, v) {
        this.data[k] = v;
        this.sort.push(k);
   };
    this.getItemByKey = function (k) {
        return this.data[k];
   };
    this.getItemByPos = function (i) {
        return this.data[this.sort[i]];
   };
    this.getAllItems = function () {
        var i, r = [];
        for (i = 0; i < this.sort.length; i++) {
            r.push(this.data[this.sort[i]]);
       }
        return r;
   };
}

var t = new DataObject();

t.setItem(1001, {name: "Test 1"});
t.setItem(1002, {name: "Test 2"});
t.setItem(1003, {name: "Test 3"});
t.setItem(1004, {name: "Test 4"});

console.log(t.getItemByKey(1001));
console.log(t.getItemByPos(0));
console.log(t.getAllItems());