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});--在我上面的代码中,当前正在返回未定义的。