递归字符串解析为对象-JavaScript

我们需要编写一个JavaScript函数,该函数接受一个字符串数组并返回一个与字符串对应的对象。

例如-

如果数组是-

const arr = [

   "country.UK.level.1",

   "country.UK.level.2",

   "country.US.level.1",

   "country.UK.level.3"

];

那么输出应该是-

const output = {

   "country": [

       {"UK" : {"level" : ["1", "2", "3"]}},

       {"US" : {"level" : ["1","2"]}}

  ]

}

 

条件

存储在str数组中的字符串将不会排序,并且代码应对此健壮。

字符串将遵循xyxy ..模式,其中x对于该数组是唯一的,而y可以更改。在我的示例中,国家和级别将始终与表示x pos的相同。

这需要递归方法,因为存储在str数组中的字符串可以是任意长度。字符串越长,嵌套越深。

示例

以下是代码-

const arr = [

   "country.UK.level.1",

   "country.UK.level.2",

   "country.US.level.1",

   "country.UK.level.3"

];

const stringToObject = arr => {

   const obj = {};

   arr.forEach(str => {

      let curr = obj;

      let splitted = str.split('.');

      let last = splitted.pop();

      let beforeLast = splitted.pop();

      splitted.forEach( sub => {

         if(!curr.hasOwnProperty(sub)){

            curr[sub] = {};

         };

         curr = curr[sub];

      });

      if(!curr[beforeLast]){

         curr[beforeLast] = [];

      };

      curr[beforeLast].push(last);

   });

   return obj;

};

console.log(JSON.stringify(stringToObject(arr), undefined, 4));

输出结果

这将在控制台上产生以下输出-

{

   "country": {

       "UK": {

           "level": [

               "1",

               "2",

               "3"

           ]

       },

       "US": {

           "level": [

               "1"

           ]

       }

   }

}

以上是 递归字符串解析为对象-JavaScript 的全部内容, 来源链接: utcz.com/z/343660.html

回到顶部