如何将localstorage变量设置为函数



我有这个函数

function sumFood (tot,tab_cout){
var tot = 0;
for (var i=0; i<tab_cout.length;i++) { 
tot += Number(tab_cout[i]);
}
localStorage.setItem('tot',tot);
}
sumFood (GLC,GLCT); 
sumFood (LIP,LIPT);

我希望GLC、LIP进入localStorage(代替tot(,但由于某些原因,我得到的结果是未定义的。。。该怎么办?(console.log给了我很好的tot结果(

未定义的原因是您已硬编码key此行:

localStorage.setItem('tot',tot);

其中它应该根据参数动态地改变。您应该注意的另一件事是,将函数中的变量与其参数命名相同不是一个好的做法,这会令人困惑。试试这个:

function sumFood (tot,tab_cout){
var total = 0;
for (var i=0; i<tab_cout.length;i++) {total += Number(tab_cout[i]);}
localStorage.setItem(`${tot}`,total);
}
sumFood(GLC,GLCT); 
sumFood(LIP,LIPT);

这将在localStorage中以单独的密钥保存总和。在您的情况下,我假设您只想将所有的键和值对存储在一个键中,即localStorage中的tot,那么tot必须是array of objects。试试下面这个:

function sumFood (tot,tab_cout){
let total = 0;
for (let i=0; i<tab_cout.length;i++) {
total += Number(tab_cout[i])
}
const savedTot = JSON.parse(localStorage.getItem('tot')) || []
const addedTot = savedTot.push({ [`${tot}`]: total })
localStorage.setItem('tot', JSON.stringify(addedTot))
}
sumFood(GLC,GLCT)
sumFood(LIP,LIPT)

//如果GLCLIP是变量,则应该将它们放在字符串中。像这样:

sumFood('GLC',GLCT)
sumFood('LIP',LIPT)

然后稍后取回:

const getTot = JSON.parse(localStorage.getItem('tot')) || []
console.log(getTot) // you will see your expected output

我必须放入returntotal才能得到我需要的东西,而且我不需要存储。所以我想你的解决方案对于标题为是正确的

function sumFood (tot,tab_cout){
var total = 0;
for (var i=0; i<tab_cout.length;i++) { 
total += Number(tab_cout[i]);
}
return total; 

}

sumFood (GLC,GLCT); 
sumFood (LIP,LIPT);

最新更新