Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串更改为数组_Javascript_Json - Fatal编程技术网

Javascript 将字符串更改为数组

Javascript 将字符串更改为数组,javascript,json,Javascript,Json,我检索以下字符串值数组 [ "Module1.resource1.create", "Module1.resource1.read", "Module1.resource1.update", "Module1.resource1.delete", ... "Module1.resourceN.create", "Module1.resourceN.read", "Module1.resourceN.update", ] 我想将它们更改为json格式,如下所示 {"privileges": {

我检索以下字符串值数组

[
"Module1.resource1.create",
"Module1.resource1.read",
"Module1.resource1.update",
"Module1.resource1.delete",
...
"Module1.resourceN.create",
"Module1.resourceN.read",
"Module1.resourceN.update",
]
我想将它们更改为json格式,如下所示

{"privileges": {
    "Module1": {
      "resource1": {
          "create": true,
          "read": true,
          "update": true,
          "delete": true,
      },
...
      "resourceN":  {
          "create": true,
          "read": true,
          "update": true,
    }
  }
 }
}
我所能想到的就是为每个字符串运行一个循环,使用split。然后以某种方式将其更改为json对象。我遇到的问题是,json不是一个简单的key:value,它更像是一个key:object:object:object:value,如果这有意义的话

我希望你能朝着正确的方向轻推我


欢呼声

可能正在使用点对象,这将有助于避免重新发明轮子:


可能使用点对象将有助于避免重新发明轮子:

您可以使用以下方法:

|

您可以使用以下方法:


|

要做到这一点,您可以使用以下功能:

function setIn(target, path, value) {
  var chain = String(path).split('.');
  while (chain.length > 0) {
    var field = chain.shift();
    if (chain.length == 0) {
      target[field] = value;
    } else if (field in target && target[field] !== null && typeof target[field] === 'object') {
      target = target[field];
    } else {
      target[field] = {}
      target = target[field];
    }
  }
  return value;
}
并生产这棵树:

var tree = { privileges: {} };
for (var i = 0; i < array.length; i += 1)
  setIn(tree.privileges, array[i], true);

为此,您可以使用以下功能:

function setIn(target, path, value) {
  var chain = String(path).split('.');
  while (chain.length > 0) {
    var field = chain.shift();
    if (chain.length == 0) {
      target[field] = value;
    } else if (field in target && target[field] !== null && typeof target[field] === 'object') {
      target = target[field];
    } else {
      target[field] = {}
      target = target[field];
    }
  }
  return value;
}
生产树木:

var tree = { privileges: {} };
for (var i = 0; i < array.length; i += 1)
  setIn(tree.privileges, array[i], true);

这花了一段时间,但工作:

常量规则=[ 模块1.resource1.create, 模块1.resource1.read, 模块1.resource1.update, 模块1.resource1.delete, 模块1.资源n.创建, 模块1.resource n.read, 模块1.resource n.update, ].maprule=>rule.split'; const res={privileges:{}; 对于常量规则{ 对于i=0;iconsole.logres这花了一段时间,但是工作:

常量规则=[ 模块1.resource1.create, 模块1.resource1.read, 模块1.resource1.update, 模块1.resource1.delete, 模块1.资源n.创建, 模块1.resource n.read, 模块1.resource n.update, ].maprule=>rule.split'; const res={privileges:{}; 对于常量规则{ 对于i=0;i const arr=[Module1.resource1.create,Module1.resource1.read,Module1.resource1.update,Module1.resource1.delete,Module1.resourceN.create,Module1.resourceN.read,Module1.resourceN.update,Module2.resourceN.update,]; 让result={privalages:{}; result.privalages=arr.reduceo,curr=>{ 让道具=当前拆分。; props.reducea,prop,index=>a[prop]=index!==props.length-1?a[prop]|{}:真,o; 返回o; },{}; console.logresult 您可以使用Array.reduce创建嵌套映射。上面的示例适用于任何级别的子级,并且始终将最后一个子级设置为布尔值

const arr=[Module1.resource1.create,Module1.resource1.read,Module1.resource1.update,Module1.resource1.delete,Module1.resourceN.create,Module1.resourceN.read,Module1.resourceN.update,Module2.resourceN.update,]; 让result={privalages:{}; result.privalages=arr.reduceo,curr=>{ 让道具=当前拆分。; props.reducea,prop,index=>a[prop]=index!==props.length-1?a[prop]|{}:真,o; 返回o; },{};
console.logresult;在我看来,循环和拆分是实现go@jonatjano但不知道如何将数组更改为多维json。。。我可以做关键:价值。但是我不知道怎么做key:object:object:key:value如果你知道我的意思……它们总是井然有序吗?@zfrisch-这是不能保证的。我认为循环和拆分是解决问题的方法go@jonatjano但不知道如何将数组更改为多维json。。。我可以做关键:价值。但我不知道怎么做key:object:object:key:value如果你知道我的意思……它们总是井然有序吗?@zfrisch-这不能保证。这正是我想要的!谢谢然而,我真的不明白那里发生了什么。。要求解释是不是太过分了?我会很感激的。不客气!我将在代码中添加一些注释。谢谢。理解总是比复制粘贴更好:有趣。我从来都不知道解构赋值语法,这将派上用场:谢谢,它完全按照我希望的方式工作!谢谢然而,我真的不明白那里发生了什么。。要求解释是不是太过分了?我会很感激的。不客气!我将在代码中添加一些注释。谢谢。理解总是比复制粘贴更好:有趣。我从来不知道解构赋值语法,这会派上用场的:谢谢找到!尽管我很瘦
问题更多的是如何从编码方面实现这一点。很好的发现!尽管我认为问题更多的是如何从编码方面实现这一点。谢谢你的努力。它确实起到了预期的作用。不过,我已经接受了另一个答案。很抱歉不过,投票结果是一致的!:谢谢你的努力。它确实起到了预期的作用。不过,我已经接受了另一个答案。很抱歉不过,投票结果是一致的!: