2017-03-15 40 views
0

我的數組是這樣的:我如何遍歷二維數組,如果我不知道這個指標

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循環,因爲它會使用整數索引。

+4

迭代您使用陣列狀物體。在JavaScript中這不是*錯誤*,但通常沒有完成。你應該使用對象,'Object.keys()'會給你一個包含屬性名稱的真實數組。你可以使用它來迭代。 – Pointy

+1

使用一個對象,然後使用'for(var key in permissions)'循環鍵。 – Barmar

+0

可能的重複[如何循環或枚舉JavaScript對象?](http://stackoverflow.com/questions/684672/how-do-i-loop-through-or-enumerate-a-javascript-object) – gyre

回答

3

您正在將對象(設計爲使用任何有效字符串作爲屬性名稱)的數組(它們最適合於整數索引屬性)混淆不清。對象有時被稱爲「關聯數組」,這使得區別有點混亂。

而不是使用new Array(),您應該使用對象文字簡寫初始化您的permissions變量。然後,你可以使用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?"

0

我會用object來存儲它。

var permissions = {}; 
permissions['role-1'] = permissions['role-1'] || {}; 
permissions['role-1']['permission-1'] = "perm1"; 
permissions['role-1']['permission-3'] = "perm3"; 

然後你可以在keys

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

感謝這個例子,btw第二行代碼是做什麼的?爲什麼或條件? –