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