Я пытаюсь заполнить объект другим, используя ключи в качестве ссылки.
// Object with actual information
{
'key1.key2.key3': {},
'key1.key4': {},
}
// Desired Shape
{
'key1': {
'key2': {
'key3': {
},
},
'key4': {
},
}
Используя библиотеку Ramda , это должно быть очень просто, а покаПосле того, как я успешно заполнил аккумулятор нужной формой, я столкнулся с тем, что он ведет себя не так, как я ожидаю.
const fillShapeWithParsed = shape =>
R.pipe(
R.toPairs,
R.reduce(
(accumulator, [shapeKey, complexValue]) => {
return R.over(
R.lensPath(shapeKey.split('.').filter(key => key !== '')),
R.merge(complexValue),
accumulator
);
},
shape
)
);
Вывод кода выше: Если значение ссылочного ключа в объектес info является массивом объектов, аккумулятор получает значение, преобразованное во вложенные объекты с индексами в качестве ключей.
// Object with information
{
'key1.key2.key3': [
{},
{},
{},
],
}
// Desired Shape
{
'key1': {
'key2': {
'key3': {
'0': {},
'1': {},
'2': {},
},
},
},
}
На данный момент я знаю, что это делается с помощью R.merge () func ...
Так что я изменил его с помощью R.clone () , и это выдало мне ошибку о том, что параметр не является функцией.
Помимо того факта, что теперь функция слияния устарела, я хочу заменить ее чем-то, что поможет мне не преобразовывать complexValue