Можно ли сократить код(csv)?
function arrayToCsv(data) {
return data.map((arr) => {
return arr.map((el) => {
let str = '';
if (typeof el === 'number') {
str = el;
} else if (typeof el === 'string') {
str = `${el.replace(/"/g, '""')}`;
if (/[,"]/.test(str)) {
return `"${str}"`;
}
}
return str;
});
}).join('\n');
}
// пример
console.log(arrayToCsv([[1, 2], ['a', 'b']])); // '1,2\na,b'
console.log(arrayToCsv([[1, 2], ['a,b', 'c,d']])); // '1,2\n"a,b","c,d"'
Ответы (1 шт):
Автор решения: Alex Krass
→ Ссылка
Стандартное приведение массива в строку уже содержит нужное поведение, единственное нужно вложенные строковые элементы обернуть в двойные кавычки при наличии запятой.
function arrayToCsv(data) {
return data.map((arr) => {
return arr.map((el) => {
el = `${el}`.includes(`"`) ? `${el.replaceAll('"', '""')}` : el;
return `${el}`.includes(`,`) || `${el}`.includes(`"`) ? `"${el}"` : el;
});
}).join('\n');
}
// пример
console.log(arrayToCsv([[1, 2], ['a', 'b']])); // '1,2\na,b'
console.log(arrayToCsv([[1, 2], ['a,b', 'c,d']])); // '1,2\n"a,b","c,d"'
console.log(arrayToCsv([['"text"', 'other "long" text']])); // """text""","other ""long"" text"