2010-12-18 10 views
6

Básicamente tengo el siguiente objeto originado en JSON:¿Cómo construir una matriz de JavaScript de los valores clave forman un objeto JSON

({ 
    "id" : 3, 
    "clientName" : "Avia", 
    "monthlyactiveusers" : 2083, 
    "dailynewlikes" : 0, 
    "totallikes" : 4258, 
    "usersgraph" : { 
     "sTotalLikes" : [{ 
      "likes" : 79, 
      "date" : "1/1/2010" 
     }, 
     { 
      "likes" : 116, 
      "date" : "1/1/2010" 
     }], 
     "sDailyActiveUsers" : [{ 
      "likes" : 79, 
      "date" : "1/1/2010" 
     }, 
     { 
      "likes" : 116, 
      "date" : "1/1/2010" 
     }] 
    } 
}); 

Y necesito el siguiente resultado:

sTotalLikes = [['1/1/2010', 79],['1/1/2010', 79],['1/11/2010', 79]]; 
sDailyActiveUsers = [['1/1/2010', 10],['1/5/2010', 300],['1/11/2010', 220]]; 

te conozco puede iterar a través del objeto para construir la matriz usando el siguiente código pero no pude encontrar la manera de construir la matriz de JavaScript. Gracias de antemano por la ayuda.

var sTotalLikes = new Array(); 

for (var i = 0; i < usersgraph.sTotalLikes.length; i++) { 
    //how do I build the arry ? 
    sTotalLikes[i] 
    } 
+0

Me pregunto si existe algún tipo de utilidad de pivote impar para estructuras de datos de JavaScript. Eso sería útil. –

+3

... es un objeto literal, no un objeto JSON (aunque podría * haber sido * un objeto JSON cuando estaba en una cadena). Afortunadamente, marqué esta URL ahora: http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ –

+0

@Felix: yes, +1 - un objeto JS con claves citadas un "objeto JSON" no hace. –

Respuesta

2

Vas a tener que iteración a través de cada elemento en sTotalLikes y sDailyActiveUsers.

También puede see the live demo here para el programa completo y de trabajo con comentarios. :)

// declare arrays for storing total likes and active users 
var totalLikes = []; 
var activeUsers = []; 



// first iterate for total likes 
for (var i = 0; i < data.usersgraph.sTotalLikes.length; i ++) 
{ 
    var like = data.usersgraph.sTotalLikes[i]; 

    // create a new array of date and likes 
    // and push into total likes 
    totalLikes.push([like.date, like.likes]); 
} 



// then iterate for active users 
for (var i = 0; i < data.usersgraph.sDailyActiveUsers.length; i ++) 
{ 
    var user = data.usersgraph.sDailyActiveUsers[i]; 

    // create a new array of date and likes 
    // and push into active users 
    activeUsers.push([user.date, user.likes]); 
} 

Espero que esto ayude!

+0

+1 para un buen detalle – Singleton

+0

¡Guau! jsfiddle.net es increíble. Gracias por señalar esto. Es exactamente lo que necesitaba para probar a mi personal. Estoy usando jqplot y originalmente estaba tratando de alimentarlo con la cadena Json especificada anteriormente, pero por alguna razón no me gusta, así que crearé una matriz de JavaScript. eso. Gracias de nuevo por la ayuda. –

+0

Siempre bienvenido :) –

2

Prueba esto .. se puede ampliar fácilmente para sDailyActiveUsers

var sTotalLikes = new Array(); 
    var lsTotalLikes = usersgraph.sTotalLikes; 
for (var i = 0; i < lsTotalLikes.length; i++) 
{ 

    var obj = lsTotalLikes[i]; 
     var lArr = [] 
     lArr.push(obj.date); 
     lArr.push(obj.likes); 
     sTotalLikes.push(lArr) 
    } 
+1

Prefiere 'var sTotalLikes = [];' a la que tienes en el código. – SuperSaiyan

+1

:) No quería cambiar el código inicial que OP tenía, puede ver la definición de lArr, he usado [], porque soy perezoso para escribir :) – Chandu

1

A mi me parece como si sólo desea buscar en los valores de los objetos.

var usersgraph = { ... }; // pulled from the data in your question 
var result = {}; 
for (users_key in usersgraph) { 
    var vals = []; 
    var data = usersgraph[users_key] 
    for (k in data) { 
     vals.push(values(data[k])); 
     // or if you need to order them differently.. 
     //vals.push([ data[k]['date'], data[k]['likes'] ]); 
    } 
    result[users_key] = vals; 
} 

Oh, si no hubiera adivinado ya puede usar [] para crear una matriz y {} para crear un/matriz asociativa objeto.

0

gusta esta (en referencia a su código):

/* inside your for loop */ 
sTotalLikes.push([ 
    usersgraph.sTotalLikes[i].date, 
    usersgraph.sTotalLikes[i].likes 
]) 
Cuestiones relacionadas