Javascript 如果不知道索引,如何循环二维数组

Javascript 如果不知道索引,如何循环二维数组,javascript,object,Javascript,Object,我的数组如下所示: var permissions = new Array(); permissions['role-1'] = new Array(); permissions['role-1']['permission-1'] = "perm1"; permissions['role-1']['permission-3'] = "perm3"; permissions['role-1']['permission-5'] = "perm5"; permissions['role-2']['p

我的数组如下所示:

var permissions = new Array();

permissions['role-1'] = new Array();
permissions['role-1']['permission-1'] = "perm1";
permissions['role-1']['permission-3'] = "perm3";
permissions['role-1']['permission-5'] = "perm5";
permissions['role-2']['permission-1'] = "perm1";
permissions['role-2']['permission-5'] = "perm5";
我如何循环遍历这样一个数组并遍历所有元素?我不能使用for循环,因为这将使用整数索引。

您将数组(最适合整数索引属性)与对象(设计为使用任何有效字符串作为属性名)混淆。对象有时被称为“关联数组”,这使得区分有点混乱

您不应该使用
new Array()
,而应该使用对象文字速记来初始化
权限
变量。然后,您可以使用
Object.keys
获取用于创建对象和使用键值对执行操作的键的列表:

var权限={
“角色-1”:{
“权限-1”:“perm1”,
“权限-3”:“perm3”,
“权限-4”:“perm1”,
“权限-5”:“perm5”,
},
“角色2”:{
“权限-1”:“perm1”,
“权限-5”:“perm5”
}
}
var object=权限['role-1']
Object.keys(对象).forEach(函数(键){
//用键值对做些什么
console.log(key,this[key])
},object)
将数组(最适合整数索引属性)与对象(设计为使用任何有效字符串作为属性名)混淆。对象有时被称为“关联数组”,这使得区分有点混乱

您不应该使用
new Array()
,而应该使用对象文字速记来初始化
权限
变量。然后,您可以使用
Object.keys
获取用于创建对象和使用键值对执行操作的键的列表:

var权限={
“角色-1”:{
“权限-1”:“perm1”,
“权限-3”:“perm3”,
“权限-4”:“perm1”,
“权限-5”:“perm5”,
},
“角色2”:{
“权限-1”:“perm1”,
“权限-5”:“perm5”
}
}
var object=权限['role-1']
Object.keys(对象).forEach(函数(键){
//用键值对做些什么
console.log(key,this[key])

},对象)
我会使用
对象来存储它

var permissions = {};
permissions['role-1'] = permissions['role-1'] || {};
permissions['role-1']['permission-1'] = "perm1";
permissions['role-1']['permission-3'] = "perm3";
然后您可以迭代

for(var key in permissions)
   console.log(permissions[key]);

我会使用
对象
来存储它

var permissions = {};
permissions['role-1'] = permissions['role-1'] || {};
permissions['role-1']['permission-1'] = "perm1";
permissions['role-1']['permission-3'] = "perm3";
然后您可以迭代

for(var key in permissions)
   console.log(permissions[key]);

您正在使用类似对象的数组。这在JavaScript中并没有错,但通常不会这样做。您应该使用对象,并且
Object.keys()
将为您提供一个包含属性名称的真实数组。您可以将其用于迭代。使用一个对象,然后使用
for(var key-in-permissions)
在键上循环。您使用的数组可能与对象类似。这在JavaScript中并没有错,但通常不会这样做。您应该使用对象,并且
Object.keys()
将为您提供一个包含属性名称的真实数组。您可以将其用于迭代。使用对象,然后使用
for(var key in permissions)
循环键。可能重复感谢示例,顺便问一下,第二行代码做什么?为什么是or条件?谢谢你的例子,顺便问一下,第二行代码是做什么的?为什么会出现这种情况?