簡體   English   中英

從數據數組創建嵌套對象和數組

[英]creating nested object and arrays from array of data

 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"

如果您可以使用Lodash或至少從該庫中獲取和設置,則可以解決問題的函數如下所示:

function transform(resources) {
    return resources.reduce((agg, resource) => {
      const splitted = resource.split('$');
      const keys = splitted.slice(0, splitted.length - 1);
      const value = splitted[splitted.length - 1];

      _.set(agg, keys, [...(_.get(agg, keys) || []), value]);


      return agg;
    }, {});
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM