учитывая следующий код, как я могу получить доступ к сохраненным элементам из Lockr.get ()? Например, я считаю, что Lockr.get ('data0') должен возвращать [{propertyname: 'property', propertyname2: 'property2', propertyname3: 'property3'}]; Я хотел бы получить доступ к имени свойства, чтобы возвращалось свойство. Вот мой код. Я имею в виду раздел updateAllDataDisplay (). Заранее спасибо.
Когда я console.log (Lockr.get ('data0')), консоль записывает в журнал: [{}, {}]. Тем не менее, когда я console.log (Lockr.get ('data0') [0] .exerciseHours) я получаю сообщение об ошибке. Что происходит ???
// Script
// Goals: Be able to store data with the date, and a journal entry
// Create dynamic showing of entries
// Be able to have multiple entries for one date in order
// Add food entries
// Add exercise entries
// Add weight entry add weight graph
// Add calorie entry
// Add mood entries for each date
// Add streak showings for entries
// Add calandar functionality
//
(function(root, factory) {
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = factory(root, exports);
}
} else if (typeof define === 'function' && define.amd) {
define(['exports'], function(exports) {
root.Lockr = factory(root, exports);
});
} else {
root.Lockr = factory(root, {});
}
}(this, function(root, Lockr) {
'use strict';
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}
Lockr.prefix = "";
Lockr._getPrefixedKey = function(key, options) {
options = options || {};
if (options.noPrefix) {
return key;
} else {
return this.prefix + key;
}
};
Lockr.set = function (key, value, options) {
var query_key = this._getPrefixedKey(key, options);
try {
localStorage.setItem(query_key, JSON.stringify({"data": value}));
} catch (e) {
if (console) console.warn("Lockr didn't successfully save the '{"+ key +": "+ value +"}' pair, because the localStorage is full.");
}
};
Lockr.get = function (key, missing, options) {
var query_key = this._getPrefixedKey(key, options),
value;
try {
value = JSON.parse(localStorage.getItem(query_key));
} catch (e) {
if(localStorage[query_key]) {
value = {data: localStorage.getItem(query_key)};
} else{
value = null;
}
}
if(!value) {
return missing;
}
else if (typeof value === 'object' && typeof value.data !== 'undefined') {
return value.data;
}
};
Lockr.sadd = function(key, value, options) {
var query_key = this._getPrefixedKey(key, options),
json;
var values = Lockr.smembers(key);
if (values.indexOf(value) > -1) {
return null;
}
try {
values.push(value);
json = JSON.stringify({"data": values});
localStorage.setItem(query_key, json);
} catch (e) {
console.log(e);
if (console) console.warn("Lockr didn't successfully add the "+ value +" to "+ key +" set, because the localStorage is full.");
}
};
Lockr.smembers = function(key, options) {
var query_key = this._getPrefixedKey(key, options),
value;
try {
value = JSON.parse(localStorage.getItem(query_key));
} catch (e) {
value = null;
}
return (value && value.data) ? value.data : [];
};
Lockr.sismember = function(key, value, options) {
return Lockr.smembers(key).indexOf(value) > -1;
};
Lockr.keys = function() {
var keys = [];
var allKeys = Object.keys(localStorage);
if (Lockr.prefix.length === 0) {
return allKeys;
}
allKeys.forEach(function (key) {
if (key.indexOf(Lockr.prefix) !== -1) {
keys.push(key.replace(Lockr.prefix, ''));
}
});
return keys;
};
Lockr.getAll = function (includeKeys) {
var keys = Lockr.keys();
if (includeKeys) {
return keys.reduce(function (accum, key) {
var tempObj = {};
tempObj[key] = Lockr.get(key);
accum.push(tempObj);
return accum;
}, []);
}
return keys.map(function (key) {
return Lockr.get(key);
});
};
Lockr.srem = function(key, value, options) {
var query_key = this._getPrefixedKey(key, options),
json,
index;
var values = Lockr.smembers(key, value);
index = values.indexOf(value);
if (index > -1)
values.splice(index, 1);
json = JSON.stringify({"data": values});
try {
localStorage.setItem(query_key, json);
} catch (e) {
if (console) console.warn("Lockr couldn't remove the "+ value +" from the set "+ key);
}
};
Lockr.rm = function (key) {
var queryKey = this._getPrefixedKey(key);
localStorage.removeItem(queryKey);
};
Lockr.flush = function () {
if (Lockr.prefix.length) {
Lockr.keys().forEach(function(key) {
localStorage.removeItem(Lockr._getPrefixedKey(key));
});
} else {
localStorage.clear();
}
};
return Lockr;
}));
//localStorage.removeItem('allData');
var allData = [];
init();
function init() {
/*
if (Lockr.get('allData') !== null && Lockr.get('allData') !== undefined) {
allData = JSON.parse(Lockr.get("allData"));
dataEntries = Lockr.get('dataEntries');
//console.log(allData);
} else {
//console.log('blank exercise data array');
allData = [];
dataEntries = 0;
}
*/
if (Lockr.get('dataEntries') > 0) {
dataEntries = Lockr.get('dataEntries');
}
}
// Create exercise field
let a = document.createElement("input");
a.setAttribute("type", "text");
a.setAttribute("value", "How long did you exercise for today");
a.size = "40";
document.body.appendChild(a);
// Create two <br> between text fields
for (let i = 0; i < 2; i ++) {
let d = document.createElement('br');
document.body.appendChild(d);
}
// Create diet text field
let e = document.createElement("input");
e.setAttribute("type", "text");
e.setAttribute("value", "What did you eat today");
e.size = "40";
document.body.appendChild(e);
// Create two <br> between text fields
for (let i = 0; i < 2; i ++) {
let d = document.createElement('br');
document.body.appendChild(d);
}
let f = document.createElement("input");
f.setAttribute("type", "text");
f.setAttribute("value", "Describe your mood in detail today");
f.size = "40";
document.body.appendChild(f);
for (let i = 0; i < 2; i ++) {
let d = document.createElement('br');
document.body.appendChild(d);
}
// Create save data button
let saveDataBtn = document.createElement("button");
saveDataBtn.innerHTML = "Save Data";
document.body.appendChild(saveDataBtn);
for (let i = 0; i < 3; i ++) {
let d = document.createElement('br');
document.body.appendChild(d);
}
// Create clear data button
let clearDataBtn = document.createElement("button");
clearDataBtn.innerHTML = "Clear Data";
document.body.appendChild(clearDataBtn);
// Create allData Header
let b = document.createElement("p");
let c = document.createTextNode('Saved Data:');
b.appendChild(c);
document.body.appendChild(b);
(function updateAllDataDisplay() {
for (var i = 0; i < dataEntries; i++) {
let currentEntry = Lockr.get(`data${i}`);
console.log(currentEntry.0.food);
let a = document.createElement("p");
let b = document.createTextNode('blah');
a.appendChild(b);
document.body.appendChild(a);
}
})();
/*
Goal: create buttons that toggle between showing a user inputted pragraph tracking their moood on the day they exercised for x number of inputted hours
*/
saveDataBtn.onclick = function () {
var date = new Date();
let day = date.getDate();
let month = date.getMonth();
let year = date.getFullYear();
let hours = date.getHours();
let mins = date.getMinutes();
let secs = date.getSeconds();
//allData.push(`${day}/${month + 1}/${year} (${hours}:${mins}:${secs}): ${a.value}. ${e.value}. ${f.value}.`);
//localStorage.setItem("allData", JSON.stringify(allData));
//Lockr.set('allData', JSON.stringify(allData));
//Lockr.set('newData', [{first: `${a.value}`}, {second: `${e.value}`}, {third: `${f.value}`}]);
//console.log(Lockr.get('newData'));
dataEntries += 1;
Lockr.set(`data${dataEntries}`, [{date:`${day}/${month + 1}/${year}`, time: `${hours}:${mins}:${secs}`, exerciseHours: a.value, food: e.value, mood: f.value}]);
Lockr.set('dataEntries', dataEntries);
console.log(Lockr.get(`data${dataEntries}`));
console.log(dataEntries);
}
clearDataBtn.onclick = function () {
//localStorage.removeItem('allData');
Lockr.rm('allData');
}