我是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
答案 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)