从jQuery each循环创建JSON

5

我浏览了论坛中所有相关问题,但都没有回答我的疑问。所以我想在这里向专家们提出问题。首先,非常感谢您的阅读。我非常欣赏Stackoverflow的价值,希望现在我也能为其做出贡献。

我想基于从 jQuery each 循环中设定的变量来动态创建一个 JSON 对象。我认为我的语法和这个领域的知识可能有点偏差。

我希望最终得到以下JSON结构:

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

在此循环中,“desktop”是来自另一个JSON对象的值,我可以轻松调用它,实际上它是我在其他JSON对象上设置的名称值。 我正在遍历名为“columns”的对象中的数组,但想设置一个单独的对象,其中包含所有宽度,因为列是可调整的,并且可以通过我将其推送到的另一个框架访问,我希望保留这些宽度。

我试图从循环内部完成这个操作:

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

我可以成功地提醒columns [i].width。 我遇到的问题是创建和访问它。 我似乎做的一切都是正确的,但事实并非如此。也许是我或我的设置?请您向我展示如何正确编写代码?如果不可能,我可以创建一个Javascript对象。提前致谢!


你是想要创建 JSON 文本吗?在我看来,你似乎只是在创建一个 JavaScript 对象。 - user1106925
1个回答

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

好的,我仍然无法正确设置。当您准备对象时,我需要“桌面”是动态的,“标题”也是动态的。这个对象可能会不同。 - Paul
抱歉,这里有一个更好的 Fiddle,我删除了一些不重要的信息。http://jsfiddle.net/LW7FJ/6/ 你可以看到它没有正确地设置对象。我想像 alert(colWidths.desktop.title) 这样返回它... - Paul
好的,我已经完成了,请查看这里的fiddle和我的更新答案。 - Marc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接