Javascript 角度收集数据最佳做法

Javascript 角度收集数据最佳做法,javascript,arrays,json,angularjs,angular-data,Javascript,Arrays,Json,Angularjs,Angular Data,我有一个数据表,它表示有关用户授权的一些信息。在表格的开头有一些动作类型,例如: Insert Update Select Delete Approve Full Control Deny 在表的左侧有操作类型的名称。例如,当用户在第一行(即组织)上单击Insert and Update时,将填充新数组 我想问的是,有没有更好的方法来实现同样的产出?我认为代码看起来很混乱,因为使用了嵌套 提前谢谢 请在展平数据集后重试,然后使用展平视图 因此,最终结果的结构如下所示: [ { "n

我有一个数据表,它表示有关用户授权的一些信息。在表格的开头有一些动作类型,例如:

Insert
Update
Select
Delete
Approve
Full Control
Deny
在表的左侧有操作类型的名称。例如,当用户在第一行(即组织)上单击Insert and Update时,将填充新数组

我想问的是,有没有更好的方法来实现同样的产出?我认为代码看起来很混乱,因为使用了嵌套

提前谢谢


请在展平数据集后重试,然后使用展平视图

因此,最终结果的结构如下所示:

[
  {
    "name": "Organization",
    "actions": [
      {
        "action": "Insert",
        "checked": true
      },
      {
        "action": "Update",
        "checked": false
      },
      {
        "action": "Select",
        "checked": false
      },
      {
        "action": "Delete",
        "checked": false
      },
      {
        "action": "Approve",
        "checked": false
      },
      {
        "action": "Full Control",
        "checked": false
      },
      {
        "action": "Deny",
        "checked": false
      }
    ]
  },
  {
    "name": "Company",
    "actions": [
      {
        "action": "Insert",
        "checked": false
      },
      {
        "action": "Update",
        "checked": false
      },
      {
        "action": "Select",
        "checked": false
      },
      {
        "action": "Delete",
        "checked": false
      },
      {
        "action": "Approve",
        "checked": false
      },
      {
        "action": "Full Control",
        "checked": true
      },
      {
        "action": "Deny",
        "checked": false
      }
    ]
  },
  {
    "name": "Department One",
    "actions": [
      {
        "action": "Insert",
        "checked": false
      },
      {
        "action": "Update",
        "checked": false
      },
      {
        "action": "Select",
        "checked": false
      },
      {
        "action": "Delete",
        "checked": false
      },
      {
        "action": "Approve",
        "checked": false
      },
      {
        "action": "Full Control",
        "checked": true
      },
      {
        "action": "Deny",
        "checked": false
      }
    ]
  },
  {
    "name": "Department Two",
    "actions": [
      {
        "action": "Insert",
        "checked": false
      },
      {
        "action": "Update",
        "checked": false
      },
      {
        "action": "Select",
        "checked": false
      },
      {
        "action": "Delete",
        "checked": false
      },
      {
        "action": "Approve",
        "checked": false
      },
      {
        "action": "Full Control",
        "checked": false
      },
      {
        "action": "Deny",
        "checked": false
      }
    ]
  }
]
以下功能用于展平:

  function flatten(arr) {
    for (var k = 0, l = arr.length; k < l; k++) {
      var obj = arr[k];
      var rec = {};
      rec.name = obj.name;
      rec.actions = [];
      obj.actions.forEach(function(act, idx) {
        rec.actions.push({
          action: action[idx].text,
          checked: act.isChecked
        });
      });
      vm.records.push(rec);
      if (obj.childs && obj.childs.length) {
        flatten(obj.childs);
      }
    }

  }
函数展平(arr){
对于(变量k=0,l=arr.length;k

Plunk:

如果你能“压缩”你的代码,只显示你需要的一个小例子,那就更好了。顺便说一句,如果您需要使用数组(重新映射、筛选等),我可以建议使用下划线库,为什么不将数据结构展平,然后将其作为活动模型处理?服务器会发送这样的数据。你的意思是在客户端变平吗@散步