Javascript循环+对象问题:如何使用循环获取对象中的必需项

时间:2012-05-08 09:23:18

标签: javascript object for-loop

我在循环,对象

方面遇到了一些麻烦

我有这样的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] }
]

如何表演?

3 个答案:

答案 0 :(得分:2)

我认为这是用于评估结果的工具的问题,如果您使用firefox console.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)
}

您可以对其进行测试here

答案 1 :(得分:1)

怎么样:

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

而不是:

obj_permissions["type"] = permission_type;

看到区别?你正在使用数组。

[编辑:实际上没有太大的区别,但这仍然澄清。见评论。]

答案 2 :(得分:1)

由于permission_type是一个数组文字,因此最终数组项的type属性最终是一个元素的数组。如果您不想这样做,请删除数组表示法。

例如:

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 不再是同一个对象,因此您无法更改所有这些立刻(无论是有意还是无意,有不良习惯,当你不指望它时)。