【问题标题】:Creating a JSON object from a List of Lists从列表列表创建 JSON 对象
【发布时间】:2015-10-27 22:11:41
【问题描述】:
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));

我正在尝试创建一个对象数组,其中每个对象都有“名称”,这是数组的第一个元素,然后是与“允许”或“拒绝”值关联的值。例如我想得到:

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

但是,有些数组有重复的键,如果该值为 Deny,它将始终胜过之前的 Deny 值。

我从遍历每个数组开始,然后尝试推动以下元素有关键吗?我在写轨道上吗?

【问题讨论】:

  • 为什么数据一开始是这样设置的?有必要吗?

标签: javascript arrays json


【解决方案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;}
&lt;div id="result1"&gt;&lt;/div&gt;

【讨论】:

  • 使用顶部的我得到如下结果: [{"name":"default_PROJECT","Connect":"Allow","AddComment":"Allow","Write":"Allow ","ViewComments":"Allow","ExportData":"Allow","ExportImage":"Allow","ViewUnderlyingData":"Allow","Read":"Allow","ShareView":"Allow", "Filter":""},{"name":"testing_PROJECT","ExportImage":"","Write":"Allow","ViewComments"..... 出于某种原因,它正在切断最后一个值以及每个对象的第一个值?
  • 该值在键之前,除了数组的第一个元素。
  • 这是我见过的最糟糕的数据结构,你应该考虑一点重构!
猜你喜欢
  • 2015-05-07
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 2018-01-02
  • 2020-03-01
  • 2017-05-06
相关资源
最近更新 更多