如何计算LocalStorage中存储的数字总和?

时间:2019-01-18 01:22:44

标签: javascript json local-storage

我是JSON的新手,请多多包涵!

我在一个通过输入将值存储到LocalStorage的网站上工作。每个表单输入都具有以下功能(唯一的区别是formInput2,formInput3)

function formInput(e) {
  // Save userInput from input
  // Get form values 
  var input = document.querySelector('.input').value;
  this.style.visibility = 'hidden';
  smtBtn.style.display = 'inline-block'
  var userInput = {
    answer: input
  }

  // Test if bookmark is null
  if (localStorage.getItem('bookmarks') === null) {
    // Init Array
    var bookmarks = [];
    // Add to array
    bookmarks.push(userInput);
    // Set to LocalStorage
    localStorage.setItem('bookmarks', JSON.stringify(bookmarks));
  } else {
    // Get Bookmarks from LocalStorage 
    var bookmarks = JSON.parse(localStorage.getItem('bookmarks'));
    // Add bookmark to array 
    bookmarks.push(userInput);
    // Reset back to LocalStorage
    localStorage.setItem('bookmarks', JSON.stringify(bookmarks));
  }

  // Refetch bookmarks
  fetchBookmarks();

  // Prevent form from submitting
  e.preventDefault();
}

我需要添加本地存储中的三个数字,并且我正在使用此功能:

function bookmarkMath() {
   var bm1 = JSON.parse(localStorage.getItem('bookmarks')),
    total = 0,
    i;
  for (i = 0; i < bm1.length; i++) {
    total += bm1[i].answers;
  }
  console.log(total);
}
}

但是,我的输出是NaN。 :(

任何帮助将不胜感激!!!!!!!

编辑:在开发工具中,这就是我从console.log(LocalStorage)中获得的信息-我在网站上的表单中输入的数字。

    Storage {bookmarks: "[{"answer":"2"},{"answer":"4"},{"answer":"5"}]", length: 1}
    bookmarks: "[{"answer":"2"},{"answer":"4"},{"answer":"5"}]"
    length: 1
    __proto__: Storage

编辑2:我更新了第二个]函数,以包含JSON.parse。但是现在我得到的只是数字0245,而不是0 + 2 + 4 + 5的总和。有帮助吗? :p

3 个答案:

答案 0 :(得分:0)

通过执行JSON.parse(),您将走上正确的道路。但是,该值在字符串中。您可以看到引号的值表示该值将威胁为字符串。您应该将其转换为数字格式,如下所示:

total += parseInt(bm1[i].answers);


如果您不想执行parseInt(),则输出应为:

{"answer": 2} //this one mean your value is Number 

相反:

{"answer":"2"} //this one mean your value is in String

答案 1 :(得分:0)

我想我看到了……这句话看起来“是错误的,但是JavaScript会接受的!”

  var bm1 = JSON.parse(localStorage.getItem('bookmarks')),
    total = 0,
    i;

注意逗号。

相反,将其写成三行:

var var bm1 = JSON.parse(localStorage.getItem('bookmarks'));
var total = 0;
var i;

答案 2 :(得分:0)

const bookmarks = JSON.parse(localStorage.getItem('bookmarks')) || []
const totalAnswers = bookmarks.map(o => +o.answer).reduce((a, b) => a + b)