从jQuery每个循环创建JSON

时间:2012-04-08 14:53:22

标签: javascript jquery json

我在董事会中挖出的所有问题并没有真正回答我的问题。所以我会问这里的专家。首先,非常感谢你阅读。我非常感谢Stackoverflow的全部内容,希望我现在可以为我成为会员做出贡献。

我想基于jQuery每个循环从另一个JSON对象设置动态创建一个JSON对象。我认为我的语法,可能是我对这些东西的了解有点过了。

我想最终得到以下JSON结构:

{
  desktop:{
    title:300,
    rev:200
  }
}

“桌面”是来自另一个不在此循环中的JSON对象的值,我可以称之为没问题,实际上它实际上是我在另一个JSON对象上设置的名称值。我循环遍历一个名为columns的对象中的数组,但是想要设置一个包含所有宽度的单独对象,因为这些列是可调整的,可以通过另一个框架访问,我将它推到那里,我希望保留这些宽度。

我试图在循环中做到这一点:

var colWidths = {};
$.each(columns, function(i) {
    colWidths.desktop.title = columns[i].width;
});

我可以成功提醒列[i] .width。我遇到的问题是创建和访问它。我似乎所做的一切似乎都是正确的但事实并非如此。也许是我或我的设置?你能告诉我如何正确编码吗?或者我可以创建一个Javascript对象,如果这是不可能的。提前谢谢!

1 个答案:

答案 0 :(得分:3)

欢迎使用Stackoverflow。你没有写任何错误信息,所以我假设如下。

// prepare the object correctly first
var colWidths = {
   desktop: {
      title: 0
   }
};
// then ADDING each value with += instead of = 
// (because in your code you will just have the last value)
$.each(columns, function(i) {
    colWidths.desktop.title += columns[i].width;
});

修改

var grid = {
    "name": "desktop",
    "columns": [
        {
        "id": "icons",
        "width": 50},
    {
        "id": "title",
        "width": 200},
    {
        "id": "name",
        "width": 300},
    {
        "id": "revision",
        "width": 400}
    ]
};

var columns = grid.columns;
var gridName = grid.name;

var colWidths = {};

// CHANGE HERE
colWidths[gridName] = {}; 

$.each(columns, function(c) {

   var col = columns[c];
   var colname = col.id;
   var colwidth = col.width;

   // CHANGE HERE
   var thisGrid = colWidths[gridName];
   if(!thisGrid[colname]) thisGrid[colname] = 0;

   thisGrid[colname] += colwidth;

});

//alert(colWidths.desktop.title);​
document.write(JSON.stringify(colWidths));

// RESULT:
// {"desktop":{"icons":50,"title":200,"name":300,"revision":400}}