Конвертировать динамическую строку в JSON, используя JavaScript - PullRequest
0 голосов
/ 27 июня 2018

Я использую API, его ответ содержит динамический массив строк в следующем виде:

var arr = ["Request.name","Request.name.first","Request.name.first.last"]; //response 3

поэтому я хочу преобразовать его динамически в массив объектов JSON, например:

var arrayOfObjects = [ 
               { 
                 "Request": {
                 "name":val 
                 }
               } //converted from arr[0]
            ,{ 
                 "Request": {
                  "name":{
                   "first":val
                  }
                 }
              } //converted from arr[1] 
            ,{ 
                 "Request": {
                  "name":{
                   "first":{
                     "last":val
                   }
                  }
                 }
               } //converted from arr[2] 
        ];

и так далее ...

возможно ли это?

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете создать функцию, которая преобразует строку, разделенную точками, в соответствующий глубоко вложенный объект, а затем сопоставит с ним ваш входной массив строк. Мое решение является итеративным, хотя я думаю, что оно также может быть сделано рекурсивно.

var arr = ["Request.name","Request.name.first","Request.name.first.last"];

function createObjFromStr(str) {

    return str.split('.').reduceRight((all, key, i, arr) => {

        if (i === arr.length - 1) {
            all = {[key]: 0};
        } else {
            all[key] = Object.assign({}, all);
            Object.keys(all).forEach(k => {
                if (k !== key) delete all[k];
            });
        }

        return all;

    }, {});

}

const arrayOfObjects = arr.map(createObjFromStr);

console.log(arrayOfObjects);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...