在javascript中访问和存储数据集

时间:2011-12-20 15:10:14

标签: javascript arrays object data-structures storage

我想弄清楚在javascript中存储和访问数据的最佳方式是什么。

我想选择与之前未知的“标识符”相关联的数据,或者添加带有新随机“标识符”的新数据集。

我是用数组还是对象做的?

阵列存储

{
"data": [
    {
        "key1": "identfifier1",
        "key2": "value2",
        "key3": "value3"
    },
    {
        "key1": "identfifier2",
        "key2": "value2",
        "key3": "value3"
    }
]
}
  • 数组在js中保持顺序。这对我来说很重要,因为我想在屏幕上显示其数据。
  • 更复杂的数据集选择与“标识符”相关联(需要某种循环或包含辅助方法,例如data.containing(“identifier”)。key2)

对象存储

{
"data": {
    "identfifier1": {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"
    },
    "identfifier2": {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"
    }
}
}
  • 对象不会在js中保持顺序,但这对我来说很重要,因为它的数据显示在屏幕上(我必须在每次输出数据之前对整个对象进行排序)
  • 简单快速地选择与“标识符”相关的数据(只需将identfifier1.key2用于示例,无需循环或辅助方法,以搜索包含“标识符”的数据集)

任何想法,方法,最佳方法吗?比另一方好一点?

2 个答案:

答案 0 :(得分:1)

使用JSON(您的第二种方法)。它的目的是为了这个目的,有许多本机功能和额外的库来支持您的工作。使用数据库(例如CouchDB或MongoDB)很容易,无需转换对象。

答案 1 :(得分:1)

如果您执行的读取次数多于写入次数,则最好使用该对象并保留可在需要时对其进行排序的单独的对象键数组。

data = {
    identfifier1 : { key1: value1,
            key2: value2,
            key3: value3
          },
    identfifier2 : { key1: value1,
            key2: value2,
            key3: value3
          }
}

当你添加新密钥时:

data.identifier3 = ...

更新订单:

var sorted = Object.keys( data ).sort();

以有序方式迭代:

for( var l = sorted.length, i = 0; i < l; ++i ) {
     alert( data[sorted[i]] );
}

或者你只能在绝对需要时进行排序,这样即使写入也会更高效。

你可以为这一切创建一个包装“类”,只需要在阅读时快速阅读和排序。