我需要存储(许多)对象或数据数组,需要满足以下条件:
我需要能够轻松地将一组新数据添加到现有数据中
我需要能够轻松地按添加的日期/时间对数据进行排序(按条目被推送到它的时间排列)
我需要能够使用引用(整数或字符串)轻松获取条目。这很重要,目前我必须执行 $.each() 来循环遍历我的数据,直到找到我想要的条目。
我试过使用这样的结构:
saved_info = {
1001: {//all my data for ref 1001},
1002: {//all my data for ref 1002}
}
这给了我想要在给出引用的情况下轻松获取信息的需求:
info = saved_info[1001];
但是,我使用的引用编号不按顺序 - 我使用的是给我的引用(它是一个唯一标识符),因此该对象不是按添加/保存/推送项目的时间顺序排列的。
最佳答案
您可以使用两个对象:
- 按键存储数据
- 另一个存储排序顺序
这样您就可以 (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());
关于javascript - 存储此数据的最佳方式(数组、对象等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22932358/