2015-10-27 5 views
-4
var data = [ 
    [ 
     "default_PROJECT", 
     "Allow", 
     "Connect", 
     "Allow", 
     "AddComment", 
     "Allow", 
     "Write", 
     "Allow", 
     "ViewComments", 
     "Allow", 
     "ExportData", 
     "Allow", 
     "ExportImage", 
     "Allow", 
     "ViewUnderlyingData", 
     "Allow", 
     "Read", 
     "Allow", 
     "ShareView", 
     "Allow", 
     "Filter" 
    ], 
    [ 
     "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 newObj = {}; 

for(i=0; i<data.length; i++){ 
    //newObj['name'] = data[i][0]; 
    for(j=1; j<data[i].length;j++){ 
    newObj[data[i][j+1]] = data[i][j]; 
    document.write(data[i][j] + "----"); 
    } 
} 

document.write(JSON.stringify(newObj)); 

Я пытаюсь создать массив объектов, где каждый объект имеет «Имя», которое является первым элементом массива, а затем значение, связанное со значением, либо «РАЗРЕШИТЬ» или «Отклонить». Например, я хотел бы получить:Создание объекта JSON из списка списков

{name: "default_PROJECT", connect: "Allow", AddComment: "Allow"} ... etc 

Однако некоторые массивы имеют иметь дубликаты ключей, и если это значение Запретить это всегда будет козырной предыдущее значение Запретить.

Я начал с итерации по каждому массиву, а затем попытка нажать следующий элемент имеет ключ? Я нахожусь на пути записи?

+0

Почему данные настройки, как это в первую очередь? Нужно ли это быть? –

ответ

1

var data =[["default_PROJECT","Allow","Connect","Allow","AddComment","Allow","Write", 
 
"Allow","ViewComments","Allow","ExportData","Allow","ExportImage","Allow","ViewUnderlyingData","Allow","Read","Allow","ShareView","Allow","Filter"], 
 
["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] = { name: list[0] }; 
 

 
    for(var j = list.length - 1; j >= 1; j = j - 2) { 
 
    var key = list[j]; 
 
    var value = list[j - 1]; 
 
    
 
    console.log('calc', j, key, value); 
 
    
 

 
    result[i][key] = value; 
 

 
    
 
    } 
 
} 
 

 
/** IGNORE THIS, IS JUST FOR DEBBUGGING **/ 
 
var resultElement = document.getElementById('result1'); 
 
var tpl = ''; 
 
for(var t = 0, tLen = result.length; t < tLen; t++) { 
 
    var item = result[t]; 
 
    
 
    tpl+= '<table>' + 
 
    '<thead>' + 
 
     '<tr><td colspan="2">' + item.name + '</td></tr>' + 
 
     '<tr><th>KEY</th><th>VAL</th></tr>' + 
 
     '</thead>' + 
 
    '<tbody>' 
 
    ; 
 
    
 
    for(var key in item) { 
 
    if(!item.hasOwnProperty(key) || key === 'name') { continue; } 
 
    
 
    tpl += '<tr><td>'+ key +'</td><td>'+ item[key] +'</td></tr>'; 
 
    } 
 
     
 
    
 
    tpl += '</tbody></table>'; 
 
} 
 
resultElement.innerHTML = tpl;
table { text-align: left; width: 100%; margin-bottom: 50px; border-collapse: collapse;} 
 
td, th { width: 50%; border: 1px solid black; line-height: 1; padding:2px 10px;} 
 
[colspan="2"] { color: blue; font-weight: bolder;text-transform: uppercase; text-align: center;}
<div id="result1"></div>


+0

используя верхний я получаю результат вроде: [{"name": "default_PROJECT", "Connect": "Allow", "AddComment": "Allow", "Write": "Allow", "ViewComments": " Разрешить», "ExportData": "Разрешить", "ЭкспортВизуализация": "Разрешить", "ViewUnderlyingData": "Разрешить", "Чтение": "Разрешить", "ShareView": "Разрешить", "фильтр": ""} , {"name": "testing_PROJECT", "ExportImage": "", "Write": "Allow", "ViewComments" ..... По какой-то причине он отключает последнее значение и первое значение каждого объекта ? – Ben

+0

Значение находится перед ключом, кроме первого элемента массива. – Ben

+0

Это худшая структура данных, которую я когда-либо видел, вы должны рассмотреть ** немного ** рефакторинг! – Hitmands

Смежные вопросы