【问题标题】:How to build a JavaScript array of key values form a json object如何从 json 对象构建键值的 JavaScript 数组
【发布时间】:2011-05-27 10:38:42
【问题描述】:

基本上我有以下 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]
  }

【问题讨论】:

  • 让我想知道是否存在用于 JavaScript 数据结构的某种奇怪的枢轴实用程序。那会很有用。
  • ...它是一个对象字面量,而不是一个 JSON 对象(尽管它在字符串中时可能曾经是一个 JSON 对象)。幸运的是,我现在为这个 URL 添加了书签:benalman.com/news/2010/03/theres-no-such-thing-as-a-json
  • @Felix: 是的,+1 - 带有引号键的 JS 对象不是“JSON 对象”。

标签: javascript jquery arrays json object


【解决方案1】:

您必须遍历 sTotalLikessDailyActiveUsers 中的每个项目。

您也可以see the live demo here 使用 cmets 获取完整且有效的程序。 :)

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

希望这会有所帮助!

【讨论】:

  • 哇!! jsfiddle.net 很棒。感谢您指出了这一点。这正是我测试员工所需要的。我正在使用 jqplot,最初我试图用上面指定的 Json 字符串来提供它,但由于某种原因它不喜欢它,所以我将构建一个 JavaScript 数组它。再次感谢您的帮助。
【解决方案2】:

试试这个.. 你可以很容易地为 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) 
  }

【讨论】:

  • 首选var sTotalLikes = []; 而不是代码中的那个。
  • :) 我不想改变OP的初始代码,你可以看一下lArr定义,我用过[],因为我懒得打字:)
【解决方案3】:

在我看来,您只是想查看对象的值。

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

哦,如果您还没有猜到,您可以使用 [] 创建一个数组并使用 {} 创建一个对象/关联数组。

【讨论】:

    【解决方案4】:

    像这样(参考你的代码):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 2018-03-02
      • 2013-12-02
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多