2015-10-30 58 views
0
var data = [ 
    ["default_PROJECT", "Allow", "Connect", "Allow", "AddComment", "Allow", "Write", 
     "Allow", "ViewComments", "Allow", "ExportData", "Allow", "ExportImage", "Allow", 
     "ViewUnderlyingData", "Allow", "Read", "Allow", "ShareView", "Allow", "Filter" 
    ], 
    ["testing_PROJECT", "Allow", "ExportImage", "Allow", "Write", "Allow", "ViewComments", 
     "Allow", "ShareView", "Allow", "Filter", "Allow", "ExportData", "Allow", "Connect", "Allow", 
     "Read", "Allow", "ViewUnderlyingData", "Allow", "AddComment", "Allow", "ViewComments", "Deny", "ExportData", "Allow", 
     "AddComment", "Deny", "Write", "Allow", "Read", "Deny", "ExportXml", "Deny", "ShareView", "Allow", "Connect", "Allow", "ChangeHierarchy", "Allow", 
     "WebAuthoring", "Deny", "ViewUnderlyingData", "Deny", "Filter", "Deny", "ExportImage" 
    ] 
]; 


var result = []; 
for (var i = 0, len = data.length; i < len; i++) { 
    var list = data[i]; 
    result[i] = { 
     Project: list[0] 
    }; 
    for (var j = list.length - 1; j >= 1; j = j - 2) { 
     var key = list[j]; 
     var value = list[j - 1]; 
     result[i][key] = value; 
    } 
} 
console.log(result); 

对于某些键可能存在多个值。如果现有的值是允许的,并且对于同一个密钥有一个值被拒绝,那么我需要该密钥的新值被拒绝。例如,在第二个数组中,“ExportImage”键的值应该是“Deny”而不是“Allow”。我创建了对象,但是如何检查值是否应该被覆盖?需要检查密钥是否已经存在并显示王牌值,javascript

+2

真的建议另格式为您的数据,但是你想只是最新的拒绝/允许值或拒绝获取比允许更多的优先级?允许,拒绝,允许会导致允许还是拒绝? – juvian

+0

有你存储在复杂的阵列,而不是实际支持键 - >值的简单对象这个数据什么特别的原因? –

+0

我正在使这个混乱的数据类型的对象数组的变量结果。 @juvian拒绝花费的时间比让更多的优先级,如果相同的密钥存在和值允许和拒绝它应该只是被拒绝。 – Ben

回答

1

对象的妙处在于,你可以检查它们的价值;)由于“拒绝”优于所有其他变量 - 然后让他赢了,否则最后的值。

案例1:允许,拒绝,允许,美孚,酒吧=>拒绝
案例2:允许,美孚,酒吧,允许,巴兹=>巴兹

for (var j = list.length - 1; j >= 1; j = j - 2) { 
    var key = list[j]; 
    var value = list[j - 1]; 
    if(result[i][key] !== "Deny") { 
     result[i][key] = value; 
    } 
}