我有这个函数
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)
//如果GLC
和LIP
是变量,则应该将它们放在字符串中。像这样:
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);