Конвертировать список объектов, когда уровни заданы в массив - PullRequest
1 голос
/ 08 мая 2019

Предположим, у меня есть массив, который сообщает мне список меток и значение, которое мне нужно, чтобы добавить их в объект JSON. Как вы это так трансформируете?

Так что в основном у меня есть массив и значение 100

arr = ["1", "Male"]

Должно быть преобразовано в объект как таковой.

obj = {
    "1":{
        "Male":100
        }
    }

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Вы можете использовать для этого reduceRight. Используйте value как initialValue для уменьшения и создайте новый уровень вложенности в каждом цикле.

function createObj(paths, value) { 
  return paths.reduceRight((r, key) =>  ({ [key] : r }), value)  
}

console.log(createObj(["1", "Male"], 100))
console.log(createObj(["level 1", "level 2", "level 3" ], "value"))
1 голос
/ 08 мая 2019

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

Это решение учитывает уже заданные свойства.

function setValue(object, path, value) {
   var last = path.pop();
   path.reduce((o, k) => o[k] = o[k] || {}, object)[last] = value;
}

var object = {};

setValue(object, ["1", "Male"], 100);
console.log(object);

setValue(object, ["1", "Female"], 200);
console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }
...