首页 > 解决方案 > 如何将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 给了我很好的结果)

标签: javascriptlocal-storage

解决方案


你得到 undefined 的原因是你硬编码了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,那么. 在下面试试这个:totarray 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

推荐阅读