javascript - 如果我不知道索引,如何循环遍历二维数组

标签 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']['permission-1'] = "perm1";
permissions['role-2']['permission-5'] = "perm5";

我如何循环遍历这样的数组并遍历所有元素?我不能使用 for 循环,因为它会使用整数索引。

最佳答案

您将数组(最适合整数索引属性)与对象(旨在使用任何有效字符串作为属性名称)混淆了。对象有时被称为“关联数组”,这使得区别有点令人困惑。

您应该使用对象文字简写来初始化 permissions 变量,而不是使用 new Array()。然后,您可以使用 Object.keys 获取用于创建对象的键列表,并使用键值对执行某些操作:

var permissions = {
  'role-1': {
    'permission-1': 'perm1',
    'permission-3': 'perm3',
    'permission-4': 'perm1',
    'permission-5': 'perm5',
  },
  'role-2': {
    'permission-1': 'perm1',
    'permission-5': 'perm5'
  }
}

var object = permissions['role-1']

Object.keys(object).forEach(function (key) {
  // Do something with your key-value pairs
  console.log(key, this[key])
}, object)

有关详细信息,请参阅 "How do I loop through or enumerate a JavaScript object?"

关于javascript - 如果我不知道索引,如何循环遍历二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42822227/

相关文章:

object - 比较 jQuery 对象

javascript - Angular $viewValue 未反射(reflect)在更改事件的文本框中

javascript - 是否可以以同步模式执行 $emit 并从 emit 事件中获取结果

javascript - React 将 props 向下传递给所有后代组件

javascript - 对象和资源管理器 9 以及所有其他浏览器和 Javascript 版本中的不同行为

javascript - 正则表达式不工作

javascript - ngModel的深层对象创建机制

javascript - 如何将多个事件数据组合成一个适合与 fullcalendar 一起使用的对象或变量?

ios - 在 Swift 中将对象从一个类移动到另一个类

java - 创建新对象和依赖注入(inject)的区别