Я использую библиотеку, которая возвращает ряд значений немного нетрадиционным способом. Вместо возврата массива библиотека возвращает вложенные объекты с конечным конечным узлом, включенным в качестве значения. Например:
red.walk.fast.true
становится {red: {walk: {fast: 'true'}}}
или climbing.ascending
становится {climbing: 'ascending'}
Формат вложенных объектов фактически подходит для моего варианта использования, но мне нужен способ преобразования конечного значения в другой вложенный объект (с нулевым значением - но это не важно), а не в значение. Итак:
{red: {walk: {fast: 'true'}}}
становится {red: {walk: {fast: {true: null}}}}
Формула должна работать для любого произвольно глубоко вложенного объекта. Я пытаюсь заставить рекурсивную функцию работать с Рамдой. Я думал, что будет работать следующее:
const stringPropToObject = R.ifElse(
R.is(String),
R.assoc(R.__, null, {}),
mapAllStringPropsToObjs);
const mapAllStringPropsToObjs = R.map(stringPropToObject)
const updatedObject = mapAllStringPropsToObjs({ a: { b: { c: 'd' } } })
console.log(updatedObject);
mapAllStringPropsToOb js (попытки) сопоставить свойства объектов, передавая их stringPropToObject . Затем он просматривает переданное свойство.
- Если это строка, то он возвращает новый объект со свойством с таким именем строки.
- Если это объект, он ( должен) рекурсивно вызывать mapAllStringPropsToOb js, передавая объект до тех пор, пока не будет достигнуто значение String.
Это приводит к «Невозможно получить доступ к mapAllStringPropsToOb js 'до инициализации». Я понимаю, почему я получаю эту ошибку с текущим порядком объявлений, но я не понимаю, как можно их упорядочить, чтобы избежать этого - они являются взаимозависимыми функциями.
Кто-нибудь знает, что я мог бы сделать, используя Ramda или vanilla JS, чтобы иметь возможность преобразовать: {climbing: 'ascending'}
в {climbing: {ascending: null}}
и {red: {walk: {fast: 'true'}}}
в {red: {walk: {fast: {true: null}}}}
или любое другое произвольно вложенное значение.
Заранее спасибо за любые предложения.