0

ループやオブジェクトで問題が発生しています

私はこのようなjsonを持っています。

var jsonPermission = {"permissions": [
                            {"permissionId": 1, "permissionName": "Admin Permission", "roleDesc": "This is an Admin Permission"},
                            {"permissionId": 2, "permissionName": "Manager Permission", "roleDesc": "This is a Manager Permission"},
                            {"permissionId": 3, "permissionName": "User Permission", "roleDesc": "This is a user Permission"}
                        ]
                    };

そして、私はこのようなオブジェクトを作成する必要があります。

[
    { data: "Admin Permission",        type: ["permission"] },
    { data: "Manager Permission",        type: ["permission"] },
    { data: "User Permission",      type: ["permission"] }
]

そこで、次のコードを使用しました。

//For Permissions
var permissions_len = jsonPermission.permissions.length;
var arr_permissions = [];
var permission_type = ["permission"];
for(var i=0;i<permissions_len;i++){
    var obj_permissions = {};
    obj_permissions["data"] = jsonPermission.permissions[i].permissionName;
    obj_permissions["type"] = permission_type;
    arr_permissions.push(obj_permissions);
}

しかし、代わりに私はこのようになっています:

[
    { data: "Admin Permission",        type: [1] },
    { data: "Manager Permission",        type: [1] },
    { data: "User Permission",      type: [1] }
]

実行する方法は?

4

3 に答える 3

2

結果を評価するために使用しているツールの問題だと思います。firefoxconsole.log()を使用して結果をコンソールに記録すると、表示したとおりの結果が得られます。ただし、コードでforループを使用して値を適切に検査すると、値が正しいことがわかります。

以下に示すように値を調べます

var permissions_len = jsonPermission.permissions.length;
var arr_permissions = [];
var permission_type = ["permission"];
for(var i=0;i<permissions_len;i++){
    var obj_permissions = {};
    obj_permissions["data"] = jsonPermission.permissions[i].permissionName;
    obj_permissions["type"] = permission_type;
    arr_permissions.push(obj_permissions);
}

for(var i=0;i<permissions_len;i++){
    var a = arr_permissions[i];
    console.log(a.data, a.type)
}

ここでテストできます。

于 2012-05-08T09:34:25.447 に答える
1

どうですか:

obj_permissions["type"] = [ permission_type[0] ];

それ以外の:

obj_permissions["type"] = permission_type;

違いを見ます?配列を使用しています。

[編集:実際にはそれほど違いはありませんが、それでも明確になります。コメントを参照してください。]

于 2012-05-08T09:26:55.777 に答える
1

permission_typeは配列リテラルであるため、最終的な配列項目のプロパティtypeは1つの要素の配列になります。意図しない場合は、配列表記を削除してください。

例えば:

var source = jsonPermission.permissions;
var arr_permissions = [];
for(var i=0;i<source.length;i++){
    arr_permissions.push({
        data: source[i].permissionName,
        type: ["permission"] // or type: "permission" if you didn't want an array
    });
}

このバージョンのコードは少し簡略化されていますが、非常に重要な違いもあります。各アイテムは同じオブジェクトではなくなったtypeため、一度にすべてを変更することはできません(意図的または偶発的に、発生するという悪い習慣があります)。あなたがそれを期待しないとき)。

于 2012-05-08T09:28:41.297 に答える