9

(コンテキスト)JSONオブジェクトに収集している一連の要素からの情報があり、MVC3コントローラーに渡されてオブジェクトに逆シリアル化されます。

「アイテム」と「アイテム設定」があります。現在、アイテムとアイテム設定の両方がすべてフラットJSONオブジェクトにあります。理想的には、アイテム設定を各アイテムの下にネストさせたいと思います。私のコードは現在次のようになっています:

 var editeditems=[];
...

        $("#SaveChanges").click(function() {

            //this works and retrieves all of the item IDs
            $(".portlet").each(function() {

                var itemname = $(this).data("itemname");
         editeditems.push(
                        {
                            "itemname": itemname
                        });

   itemname = $(this).data("itemname");

      $(".settingInput").each(function() {

          editeditems.push(
              {
              "settingkey":$(this).attr("name"),
              "settingvalue":$(this).attr("value")
              });


                });


 });

$( "。settingInput")。各関数の下で、設定が追加されます。'editedItems.settings.push ..'のような構文を試しましたが、構文エラーが返されます。

どんな助けでも大歓迎です!

4

3 に答える 3

14
var editeditems = [];
...

$('#SaveChanges').click(function() {
    $('.portlet').each(function() {
        var settings = [];
        $('.settingInput').each(function() {
            settings.push({
                settingkey: $(this).attr('name'),
                settingvalue: $(this).attr('value')
            });
        });

        editeditems.push({
            itemname: $(this).data('itemname'),
            settings: settings
        });
    });

    ...
});

サンプル出力を生成します:

var editeditems = 
[
    {
        "itemname": "item1",
        "settings": [
            {
                "settingkey": "key1",
                "settingvalue": "value1"
            },
            {
                "settingkey": "key2",
                "settingvalue": "value2"
            }
        ]
    },
    {
        "itemname": "item2",
        "settings": [
            {
                "settingkey": "key1",
                "settingvalue": "value3"
            },
            {
                "settingkey": "key2",
                "settingvalue": "value4"
            }
        ]
    }
];
于 2012-05-07T15:49:26.183 に答える
3
var ei = {'settings': [3]};
ei.settings.push(4);
console.log(ei);
// This will output an object with property settings and value an array with values (3 and 4)
于 2012-05-07T15:48:45.677 に答える
1

フラットデータ配列jsonを次のように作成する必要があります。

[{"itemname": "item1","settingkey": "key1","settingvalue": "value1"},
 {"itemname": "item2","settingkey": "key2","settingvalue": "value2"},];

上記の日付をこのように処理するより

var keys = Object.keys(dataMap);

var json = [];
for (var key in keys) {
        var innerJson = {};
        innerJson["name"] = keys[key];
        var innerMap = dataMap[keys[key]];

        if (innerMap instanceof Array) {
            innerJson["size"] = innerMap[0];
        } else if (innerMap instanceof Object) {

            var child = processHirarchiachalData(innerMap);
            innerJson["children"] = child;
        }
        json.push(innerJson);
    
}
于 2015-02-23T13:59:20.743 に答える