Привет всем! У меня возник вопрос по JavaScript. Я объявил кучу переменных (типа title1, title2, …, title9) и хочу их как-то обойти в цикле. Можно ли это сделать?
Вот пример моего кода:
let data = [];
let info = [];
let hints = [];
let item = {'data': someValue};
if(localStorage.getItem('data')) {
let temp = JSON.parse(localStorage.getItem('data'));
temp.forEach(el => data.push(el));
}
data.push(item);
localStorage.setItem('data', JSON.stringify(data));
Я хочу, чтобы похожий код автоматически генерировался для info и hints. Реально ли это? Может, есть какой-то способ динамически обращаться к переменным? Буду благодарен за любые идеи!
Дружище, лучше использовать объект вместо кучи отдельных переменных. Типа:
let storage = {
data: [],
info: [],
hints: []
};
Тогда можно легко обойти все свойства в цикле:
for (let key in storage) {
let item = {[key]: someValue};
if (localStorage.getItem(key)) {
storage[key] = JSON.parse(localStorage.getItem(key));
}
storage[key].push(item);
localStorage.setItem(key, JSON.stringify(storage[key]));
}
Так код будет намного чище и гибче. Проверено на личном опыте!
слушай, а почему бы тебе не использовать массив объектов? это решит твою проблему на раз-два. вот смотри:
let items = [
{ name: 'data', value: [] },
{ name: 'info', value: [] },
{ name: 'hints', value: [] }
];
items.forEach(item => {
let newItem = { [item.name]: someValue };
if (localStorage.getItem(item.name)) {
item.value = JSON.parse(localStorage.getItem(item.name));
}
item.value.push(newItem);
localStorage.setItem(item.name, JSON.stringify(item.value));
});
tак ты сможешь легко добавлять новые элементы, не меняя основной код. и циклом пробежаться по всем переменным - вообще красота! я сам так делаю, когда нужно работать с похожими данными.
Чувак, а ты не думал про eval() попробовать? Типа так:
for (let i = 1; i <= 9; i++) {
let varName = ‘title’ + i;
eval(varName + ’ = “Значение ’ + i + '”');
}
Потом можешь в цикле обращаться к переменным через eval(varName). Только осторожно, eval() может быть опасной штукой, если не знать, что делаешь. Но для твоей задачи вполне покатит, имхо.