Javascript 循环 + 对象问题:如何使用循环获取对象中的必需项
Javascript loop + Object Issue: How to get required item in object with 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] }
]
如何表现?
我认为这是您用于评估结果的工具的问题,如果您使用 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)
}
您可以在此处进行测试。
怎么样:
obj_permissions["type"] = [ permission_type[0] ];
而不是:
obj_permissions["type"] = permission_type;
看到区别了吗? 您正在使用数组。
[编辑:实际上没有太大区别,但这仍然澄清了。 请参阅评论。
由于 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
不再是同一个对象,所以你不能一次更改所有对象(无论是有意还是无意,这有一个坏习惯,当你没有想到它时发生)。
相关文章:
- 如何在循环中使用jQuery.on()方法,而不覆盖我循环的对象
- 在 JavaScript 中使用 for in 循环从对象中获取值
- 如何在jquery中从$.each循环创建对象数组
- Javascript - 使用 for 时遇到问题.以循环访问对象
- 在对象中循环json对象
- 获取for in循环中对象的名称,用作另一个对象的键
- 如何循环通过对象并创建树对象
- Javascript - 循环访问对象数组,仅显示最后一个对象
- 如何循环访问对象中的编号属性
- 使用 for 循环生成对象列表
- Javascript/jQuery:循环访问对象内的数组值
- 基于 Javascript 的嵌套 for 循环以及对象
- Javascript/Node - 使用 for 循环将对象插入数组
- 返回 for 循环中对象中每个键的值
- 如何在“ng-options”属性中循环访问对象内的数组
- 如何字符串化循环 JSON 对象并将其保存到文件
- 循环到对象数组和对属性的访问
- 在 JavaScript 中循环访问对象
- Javascript,'for in' 循环将对象读取为字符串
- 循环访问对象数组