【问题标题】:Restructure JS object to fit binding MVC model重构 JS 对象以适应绑定 MVC 模型
【发布时间】:2015-12-16 12:35:04
【问题描述】:

我有一个 javascript 对象,其中包含由插件获取的嵌套对象,该插件保存在名为“json”的变量中:

// var json:
Object {0: Object, 1: Object}
    0: country
        countryCapital: Object
        ministers: Array[1]
    1: country
        countryCapital: Object
        ministers: Array[3]

// Should be restructured to fit MVC models
World
    Country Array [2]
        Capital: Object
        Minister: Array [1]

因为我使用 jQuery-ajax 将数据发送到 MVC 控制器,所以我试图重命名/重组它们以将它们绑定到 MVC 模型,以便我可以将整个“世界”对象作为 1 个参数发送。

// Controller
[HttpPost]
public void Save(World world) 

// Model structure:
World
    * Country (list)
        1 Capital
        * Minister (list)

如何将 javascript 对象转换为适合模型参数的正确结构?我需要循环所有内容还是可以以更好的方式完成?

更新:

json 对象更新,数据量大,我简化了。

// World
{
    "0": { // Country
        "ministers": 
        {
            "objects": [
                {
                    "name": "name1"
                },
                {
                    "name": "name2"
                }
            ]
        },
        "countryCapital": {
          "name": "...",
        }
    },
    "1": { // Country
        "ministers": 
        {
            "objects": [
                {    
                    "name": "name1"
                },
                {
                    "name": "name2"
                }
            ]
        },
        "countryCapital": {
            "name": "...",
        }
    }
}

【问题讨论】:

  • 你能提供json然后object吗?

标签: javascript jquery json asp.net-mvc json.net


【解决方案1】:

我猜你正在搜索$.map()

它在后台循环你的收藏,但在你的情况下使用它更干净。

【讨论】:

  • 在不包括整个库的情况下映射它非常简单,并且问题不要求 jQuery
  • 我的错误......我 cmd+f 页面为 jquery 但它不是第一次出现......除非我很愚蠢[编辑:它在一开始就在那里,再次抱歉:) ]
  • 我正在使用 jQuery,并且标签在开始时就在那里,但我对所有(最好的)解决方案持开放态度。我正在尝试两种可能性。
  • @Sam @CarbonDry 好,我觉得map() 是最好的 =)
  • 好吧,我提供的答案将为您创建“世界”作为单个参数,并以 $.map 的方式构建您的结构。所以无论什么最适合你。
【解决方案2】:

更新为使用您的示例 json。 Jsfiddle

var world = {}

for (var countryIteration in originalObject) {
	var country = originalObject[countryIteration];
  world[countryIteration] = { //you need to this because you need dynamic keys.
    capital : country.countryCapital.name,
    ministers : country.ministers.objects
  }
}

【讨论】:

  • 什么是for each?那不是 JS。
  • 它是用伪方式编写的,我已经更新了代码,这是一个有效的 jsfiddle jsfiddle.net/stevewbrown/j3gd3se0/1/embedded/result
  • 这是否比使用您认为的 jQuery 地图功能更好的解决方案?它使用更少的代码来完成相同的工作,所以看起来就是这样。
  • 使用您发布的示例,您仍然需要创建世界对象,并且您正在$.map 的内部循环中创建$.each 循环。因此在这个例子中使用的代码更少。
【解决方案3】:

感谢 teo van kot 使用 jQuery map,我找到了一个可行的解决方案。

var world = {}

$.map(json, function (value, i) {
    if (i == "countryCapital") { 
       world.Capital = value 
    }
    if (i == "ministers") {
        world.Minister= value

        $.each(value, function (j, minister) {
            world.Minister[j].Name = minister.name;
            delete minister.name;
        });
    }
}, world);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    相关资源
    最近更新 更多