Как построить массив ключевых значений JavaScript из объекта json - PullRequest
6 голосов
/ 18 декабря 2010

В основном у меня есть следующий объект, созданный 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"
        }]
    }
});

И мне нужен следующий результат:

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]];

Я знаю, что вы можете перебирать объект для построения массиваиспользуя следующий код, но я не мог понять, как построить сам массив JavaScript.Заранее спасибо за помощь.

var sTotalLikes = new Array();

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

Ответы [ 4 ]

2 голосов
/ 18 декабря 2010

Вам придется выполнять итерацию по каждому элементу в sTotalLikes и sDailyActiveUsers.

Вы также можете посмотреть живое демо здесь для полной и рабочей программы с комментариями. :)

// 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]);
}

надеюсь, это поможет!

2 голосов
/ 18 декабря 2010

Попробуйте это .. вы можете легко расширить его для 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 голос
/ 18 декабря 2010

Мне кажется, что вы просто хотите посмотреть на значения объектов.

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;
}

О, если вы еще не догадались, вы можете использовать [], чтобы создать массив, и {}, чтобы создать объект / ассоциативный массив.

0 голосов
/ 18 декабря 2010

Вот так (со ссылкой на ваш код):

/* inside your for loop */
sTotalLikes.push([
    usersgraph.sTotalLikes[i].date,
    usersgraph.sTotalLikes[i].likes
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...