Как перевести двумерный массив (массив массивов) в CSV формат и вернуть строку?
Например у нас есть массив:
const arr = [[1, 2], ['a', 'b']]
нужно вернуть строку в формате CSV:
'1,2\na,b' // примерно вот так
Как это реализовать?
Ответы (2 шт):
Автор решения: Vasily
→ Ссылка
Можно сделать так:
const array = [[1, 2], ["a", "b"]]
const temp = []
array.forEach((arr, i) => {
const line = arr.join(",")
temp.push(i === 0 ? `${line}\n` : line)
})
const result = temp.join("")
console.log(result)
// 1,2
// a,b
console.log(JSON.stringify(result))
// "1,2\na,b"
Отдельно добавляю способ, предложенный пользователем @Grundy, на случай, если перенос строки необходим не только после первого массива:
const array = [[1, 2], ["a", "b"]]
const result = array.join("\n")
console.log(result)
// 1,2
// a,b
console.log(JSON.stringify(result))
// "1,2\na,b"
Автор решения: Stepan Kasyanenko
→ Ссылка
Запятую, перевод строки и двойные кавычки надо эскейпить.
const array = [
[1, 2],
[',,,"'],
[',"",'],
['"""'],
['"'],
['a\nb'],
['ac']
];
function escapeCSV(val) {
if (typeof val === 'string') {
if (val.match(/(,|"|\n)/)) {
val = val.replace(/"/g, '""');
val = `"${val}"`;
}
return val;
} else {
return val;
}
}
function getCSVFromArray(arr) {
return arr.map((item, i) => {
return item.map(m => escapeCSV(m)).join(",");
}).join('\n');
}
console.log(getCSVFromArray(array));