2017-09-13 1 views
-2

J'utilise LocalStorage pour stocker certaines valeurs localement, et j'essaie d'obtenir la somme de tous les tableaux sous la valeur "task". J'essaie de calculer le total de toutes les valeurs et de l'imprimer à l'écran.LocalStorage - JavaScript Tableaux: Somme des valeurs

clé Mon localStorage est: todos

Voici le code que je sers dans ma console pour saisir les éléments de localStorage:

values = localStorage.getItem("todos"); 
alert(values); 

Et il retournera:

[{"due":"15/09/2017","task":"30"},{"due":"16/09/2017","task":"20"}] 

Maintenant, si j'essaie de lire todos.task, cela me donne toujours une erreur NULL.

Comment est-ce que je peux faire ceci? Je veux sélectionner toutes les entrées sous TÂCHE, et obtenir la somme de leur total.

+0

_ "Maintenant, si j'essaie de lire todos.task, ça me donne toujours une erreur NULL." _ Qu'est-ce que cela signifie? Où est le code où vous avez essayé cela? C'est la partie la plus importante. Nous ne pouvons pas corriger le code que vous ne nous montrez pas. – JLRishe

+0

Veuillez vous assurer que lors du stockage des données dans localStorage, vous utilisez JSON.stringify() & lors de l'extraction de JSON.parse() –

+0

Vous ne spécifiez jamais 'todos' dans votre question. Cependant, obtenez-vous quelque chose pour 'values ​​[0] .task', car' values' est un tableau? –

Répondre

2

var values = '[{"due":"15/09/2017","task":"30"},{"due":"16/09/2017","task":"20"}]'; 
 
var data = JSON.parse(values); 
 
var sum = 0; 
 

 
data.forEach(function(ele){ 
 
sum+=Number(ele.task) 
 
}) 
 
console.log(sum);

De localStorage vous obtiendrez des données sous forme de chaîne. analyser ces données en utilisant JSON.parse; puis itérer tout l'élément et ajouter une valeur de tâche.

+0

Merci beaucoup ça fonctionne comme un charme: c'est le code de mon côté : var values ​​= localStorage.getItem ("todos"); var données = JSON.parse (valeurs); var sum = 0; data.forEach (fonction (ele) { sum + = Nombre (ele.task)}) console.log (somme); – unkn0wnx

4

vous pouvez le faire de la manière suivante

let arr = [{"due":"15/09/2017","task":"30"},{"due":"16/09/2017","task":"20"}] 
 

 
let sum = arr.reduce((a, b) => a+parseInt(b.task), 0); 
 

 
console.log(sum);

+0

Merci beaucoup! Cependant, j'obtiens cette erreur en essayant d'obtenir les données directement à partir de localStorage.getItem ("todos": arr.reduce n'est pas une fonction.) Quand vous utilisez votre exemple, cela fonctionne parfaitement.Le code que j'ai essayé d'utiliser: let arr = localStorage.getItem ("todos"); let somme = arr.reduce ((a, b) => a + parseInt (b.task), 0); console.log (somme), – unkn0wnx

+0

Pouvez-vous vérifier typeof arr dans votre code? – marvel308

+0

Si c'est une chaîne juste arr = JSON.parse (arr) avant de réduire – marvel308

1

Si vous avez une quantité considérable de ces opérations, je suggère d'utiliser soit des bibliothèques

-Underscore
-Lodash

let jsonCol = JSON.parse(localStorage.getItem("todos")); 
let sum = 0; 

_.each(jsonCol, function(obj) // Underscore 
{ 
    sum += obj.task; 
}); 


_each(jsonCol, function(obj) // Lodash 
{ 
    sum += obj.task; 
}); 

Hope this helps :)