首页 > 解决方案 > 从数据数组创建嵌套对象和数组

问题描述

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"]
  }
}

标签: javascript

解决方案


你必须使用递归

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"


推荐阅读