Node js, замена вхождений во вложенной структуре данных - PullRequest
1 голос
/ 29 мая 2020

Обычно я хочу заменить # вхождений в строке из объекта. Как вы можете видеть, он заменяет вхождения в templateName, description, comments и Name, но я не могу заменить заголовок разделов и вопросы разделов, как мне улучшить свой l oop, чтобы применить replaceOccurrences в массивах объектов section.header и разделах? . заголовки разделов - это массив объектов, которые я тоже хочу включить. Любая идея? спасибо.

Код

const replaceOccurrences = (originalString) => (typeof originalString === 'string' ? originalString.replace(/#/g, '#') : originalString);

const generateTemplate = async (data) => {

  for (const [k, v] of Object.entries(data)) { data[k] = replaceOccurrences(v); }

  return template(data);
};

Данные

data :  {
  Name: 'Rajesh',
  sections: [
    {
      questions: [Array]
    }
  ],
  templateName: 'TEMPLAT#E',
  description: 'Tes#t',
  comments: "adasdada'dfgdfgdfg 'gfddf#gdfgdf #num;## ##fsdfds gdfgdfgfd##"
}

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Ответ Джеймса будет работать, если ваш obj сериализуем, иначе вам понадобится рекурсивная функция

const removePoundSign = cur => {
  if (typeof cur === 'string') {
    return cur.replace(/#/g, '#');
  }

  if (cur == null || typeof cur !== 'object') return cur;

  if (Array.isArray(cur)) {
    return cur.map(el => removePoundSign(el));
  }

  const newObj = {};
  for (const key in cur) {
    newObj[key] = removePoundSign(cur[key]);
  }
  return newObj;
};

, нет необходимости, чтобы функция была асинхронной c в вашем коде!

0 голосов
/ 29 мая 2020

Вы можете преобразовать объект в строку, произвести замену, а затем вернуть его в форму объекта:

let a = JSON.stringify(data).replace(/#/g, '#');
let b = JSON.parse(a);

Name: "Rajesh"
comments: "adasdada'dfgdfgdfg 'gfddf#gdfgdf #num;## ##fsdfds gdfgdfgfd##"
description: "Tes#t"
sections: Array(1)
0: {header: "Testing sec#tion", questions: Array(1)}
length: 1
__proto__: Array(0)
templateName: "TECHNICAL TEMPLAT#E"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...