Как корректно экранировать кавычки?
надо написать функцию, которая переводит двумерный массив в CSV и возвращает строку. Пример:
func([[1, 2], ['a', 'b']]) // '1,2
a,b'
func([[1, 2], ['a,b', 'c,d']]) // '1,2
"a,b","c,d"'
Сделал так, не проходит тест "корректно экранирует кавычки ":
Expected: """"text""","other ""long"" text""
Received: ""text",other "long" text"
Мой код:
function func(arr) {
return arr
.map(array => array.map(e => {
let type = typeof e;
if (type !== "number" && type !== "string")
throw new Error("Unexpected value");
return (type === "string" && e.includes(",")) ? JSON.stringify(e) : e;
}).join(","))
.join("\n");
}
Что надо исправить?
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Насколько я понимаю, нужно а) экранировать имеющиеся кавычки путем их удвоения, б) заключить в кавычки весь текст, содержащий запятые
function func(arr) {
return arr
.map(array => array.map(e => {
let type = typeof e;
if (type !== "number" && type !== "string")
throw new Error("Unexpected value");
if (type === "string") {
e = e.replace(/"/g, '""');
if (e.includes(",")) e = '"' + e + '"';
}
return e;
}).join(","))
.join("\n");
}
console.log(func([[1, 2], ['a,b', 'c,d'], [123, 456], ['aaa', '"text",other "long" text']]))