Javascript 初始化对象中的数组,在localStorage中使用
孤立问题:Javascript 初始化对象中的数组,在localStorage中使用,javascript,arrays,local-storage,javascript-objects,Javascript,Arrays,Local Storage,Javascript Objects,孤立问题: user[username] = { cool: true, stuff: false, arrData: [] }; 我试图全局初始化我的arrData数组,以便在不同的范围内填充;下面的方法不起作用 let user.arrData = [], 稍后,我将针对上下文执行以下操作: ........... inputs.forEach(function(input){ user = JSON.parse(localStorage.getItem(u
user[username] = {
cool: true,
stuff: false,
arrData: []
};
我试图全局初始化我的arrData数组,以便在不同的范围内填充;下面的方法不起作用
let user.arrData = [],
稍后,我将针对上下文执行以下操作:
...........
inputs.forEach(function(input){
user = JSON.parse(localStorage.getItem(username)); // tried moving this here
user.arrData.push({ id: input.id, checked: input.checked });
// the above errors on .arrData cannot push undefined, I have tried also including the key here, how is this done?
});
localStorage.setItem(user, JSON.stringify(user.arrData));
console.log({ arrData: user.arrData }); // returns undefined
............
子问题:我可以像这样使用localStorage
设置和检索object.array吗。是指我引用的(user.arrData)
上下文/实际代码: 下面是上下文的完整相关代码:我试图用本地存储为每个用户保存一系列复选框状态,然后在单击按钮时重新加载它们。
let user = {};
var savebtnBM = document.getElementById("savebtnBM");
const username = document.querySelector("span.name").textContent;
user[username] = {
cool: true,
stuff: false,
arrData: []
};
var layersMod = document.querySelectorAll(".layers #savebtnBM")[0];
layersMod.addEventListener('click', ()=>{
setTimeout(
function() {
Saver();
}, 2000);
});
function Saver() {
var inputs = document.querySelectorAll('input[type="checkbox"]');
// var arrData = [];
inputs.forEach(function(input){
user[username].arrData.push({ id: input.id, checked: input.checked });
});
localStorage.setItem(user, JSON.stringify(user.arrData));
console.log(JSON.stringify(user.arrData));
}
var etHOME= document.getElementById("et-phone-home");
etHOME.addEventListener('click', ()=>{
user = JSON.parse(localStorage.getItem(username));
console.log(user);
document.getElementsByClassName("big-button")[0].click();
setTimeout(load_, 2000);
function load_() {
var inputs = JSON.parse(localStorage.getItem(user));
inputs.forEach(function(input){
document.getElementById(input.id).checked = input.checked;
load__();
});
function load__() {
var elems = document.querySelectorAll('input:checked');
for(var i = 0; i<elems.length; i++) {
elems[i].click();
}
}
}
});
let user={};
var savebtnBM=document.getElementById(“savebtnBM”);
const username=document.querySelector(“span.name”).textContent;
用户[用户名]={
酷:没错,
材料:假,
数据:[]
};
var layersMod=document.querySelectorAll(“.layers#savebtnBM”)[0];
LayerMod.addEventListener('单击',()=>{
设置超时(
函数(){
储蓄者();
}, 2000);
});
函数Saver(){
var inputs=document.querySelectorAll('input[type=“checkbox”]”);
//var-arrData=[];
输入。forEach(函数(输入){
用户[username].arrData.push({id:input.id,checked:input.checked});
});
setItem(user,JSON.stringify(user.arrData));
log(JSON.stringify(user.arrData));
}
var etHOME=document.getElementById(“et电话总部”);
etHOME.addEventListener('click',()=>{
user=JSON.parse(localStorage.getItem(用户名));
console.log(用户);
document.getElementsByCassName(“大按钮”)[0]。单击();
setTimeout(加载时间,2000年);
函数加载{
var inputs=JSON.parse(localStorage.getItem(用户));
输入。forEach(函数(输入){
document.getElementById(input.id).checked=input.checked;
加载_uu;();
});
函数加载{
var elems=document.querySelectorAll('input:checked');
对于(var i=0;i子问题回答:
user[username] = {
cool: true,
stuff: false,
arrData: []
};
localStorage
和sessionStorage
只能处理字符串
因此,首先我们必须使用JSON.stringify()
将对象转换为字符串,如下例所示:
localStorage.setItem('user', JSON.stringify(user));
在获取以前保存的数据时,我们使用JSON.parse()
:
子问题回答:
user[username] = {
cool: true,
stuff: false,
arrData: []
};
localStorage
和sessionStorage
只能处理字符串
因此,首先我们必须使用JSON.stringify()
将对象转换为字符串,如下例所示:
localStorage.setItem('user', JSON.stringify(user));
在获取以前保存的数据时,我们使用JSON.parse()
:
当您定义user[key]
时,arrData
已经初始化为[]
。控制台说它没有定义;当我将它从用户对象中取出并用var arrData=[]自行初始化时,arrData工作并填充-所以它必须是用户对象。let userA.arrData=[]
的功能是什么?也许你需要user[key]。arrData=[]
@LeandroMatilla和@igg我已经为上下文添加了完整的相关代码,并修改了OP.@CaptainRon似乎有语法错误。首先定义用户
,然后尝试访问用户a
。此外,还依赖文档的结果。querySelector
为用户[用户名]获取密钥
,这很危险。对于初学者,将userA
的每个实例替换为user
,看看会发生什么。您希望结果是什么让userA.arrData=[]
成为什么?arrData
在定义user[key]时已初始化为[]
.Console说它没有定义;arrData,当我将它从用户对象中取出并用var arrData=[]自身初始化时,它会工作并填充-因此它必须是用户对象。让userA.arrData=[]的功能是什么?可能你需要用户[key]。arrData=[]
@LeandroMatilla和@igg我已经为上下文添加了完整的相关代码,并修改了OP.@CaptainRon似乎有语法错误。首先定义用户
,然后尝试访问用户a
。此外,还依赖文档的结果。querySelector
为用户[用户名]获取密钥
,这很危险。对于初学者,用user
替换userA
的每个实例,看看会发生什么。谢谢但是;localStorage.setItem(user,JSON.stringify(user));console.log({arrData:user.arrData});--在我上面的代码中当前返回未定义的。谢谢但是;localStorage.setItem(user,JSON.stringify(user));console.log({arrData:user.arrData});--在我上面的代码中,当前正在返回未定义的。