Предполагается, что CSV проанализирован в массиве массивов, т.е.
var data = [["timestamp", ["temp1", "temp2", "temp3"],
["timestamp2", ["temp4", "temp5", "temp6"],
и т.д ..];
Тогда я бы сопоставил столбцы с именами строк:
columns = ["timestamp", "temperature"];
и затем используйте их для создания простого словаря:
var objectStore = db.transaction("temperatures", "readwrite").objectStore("temperatures");
for (var i = 0; i < data.length; i++) {
var data = {};
var row = data[i];
for (var j = 0; j < row.length; j++) {
data[columns[j]] = row[j];
}
objectStore.put(data, i);
}
Таким образом, вы можете получить доступ к строкам с помощью objectStore.get(rownumber)
Но чтобы быть более NoSQLish об этом, я бы сделал один из столбцов (скажем, «метка времени») ключевым путем объекта и использовал multiEntry для индексации всех подзначений массива температур. Создайте это так:
db.createObjectStore("temperatures", {keyPath: "timestamp"});
db.createIndex("temp", "temperature", {"multiEntry": true});
Тогда, когда вы положите, не беспокойтесь о ключе:
objectStore.put(data);
тогда вы можете получить материал, основанный на этом:
objectStore.get("2012-04-05");
Но что действительно здорово, так это то, что теперь у вас есть обратный индекс температур по времени, позволяющий вам сказать что-то вроде «дайте мне все записи, которые имеют температуру от 20 до 30 градусов»:
objectStore.index("temp").openCursor(IDBKeyRange.bound(20, 30)).onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
cursor.continue();
console.log("Found record: ", cursor.value);
}
}
Вам просто нужно быть осторожным, чтобы путь ключа хранилища объектов указывал на уникально идентифицируемый столбец.