javascript - 从数据数组创建嵌套对象和数组
问题描述
var resources = ["user$manageuser", "user$createuser", "details$/user-details-data", "page1$user$deletesupplier"]
var result = resources.reduce(
(r, s) =>
((key, value) => Object.assign(r, {
[key]: [].concat(r[key] || [], value)
}))
(...s.split('$')), {}
);
console.log(result);
无法嵌套 page1 的级别,我该怎么做?
expectedoutput = {
user: ["manageuser", "createuser"],
details: ["/user-details-data"],
page1: {
user: ["deletesupplier"]
}
}
解决方案
你必须使用递归
const data = ["user$manageuser", "user$createuser", "details$/user-details-data", "page1$user$deletesupplier"]
function makeObject(resources, object = {}) {
return resources.reduce((result, string) => {
const [key, value] = string.split(/\$(.+)/)
if (value && value.includes('$')) {
result[key] = result[key] || {}
makeObject([value], result[key])
} else {
result[key] = result[key] || []
result[key].push(value)
}
return result
}, object)
}
const res = makeObject(data)
console.log(res)
这适用于任何深度,您也可以将对象添加到数组中,例如。"user$test$test2"
推荐阅读
- node.js - node js升级6到8版本报错
- alexa - Alexa Skill ki 手动输入
- java - 需要帮助列出基于用户输入的字符频率
- wordpress - Hawkhost 重定向到 Wordpress
- class - 如何在本机反应中包含来自另一个文件的组件视图?
- node.js - sqlite3使用Node创建带有回调的数据库
- java - Java保存到文件中的错误
- azure - 链接的 ARM 模板导致模板无效
- android - Android Activity tag android:name MD5 在 Manifest 文件中更改,但未更改任何代码
- php - 使用 PHP (Ubuntu 16.04) 连接 SQL Server