我有以下数组数组(二维数组)
train()
如何从上面的数组中删除空列。
Input csvData = [["", "2", "", ""], ["", "3", "", ""], ["", "", "4", ""]]
我正在尝试但无法完成。
Output csvData = [[ "2", ""], ["3", ""], ["","4"]]
答案 0 :(得分:2)
您可以先获取填充列,然后过滤数组。
var csvData = [["", "2", "", ""], ["", "3", "", ""], ["", "", "4", ""]],
columns = csvData.reduce(
(r, a) => (a.forEach((v, i) => r[i] = r[i] || v), r),
[]
);
csvData = csvData.map(a => a.filter((_, i) => columns[i]));
console.log(csvData);
.as-console-wrapper { max-height: 100% !important; top: 0; }
仅删除最后一个空列,可以获取已填充列的最大值,然后删除其余列。
var csvData = [["", "2", "", ""], ["", "3", "", ""], ["", "", "4", ""]],
max = csvData.reduce(
(r, a) => (a.forEach((v, i) => v && (r = Math.max(r, i))), r),
0
);
csvData = csvData.map(a => a.slice(0, max + 1));
console.log(csvData);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
将Array.reduce()
与Array.some()
一起使用以标识空列。
然后使用Array.map()
迭代数组,并使用Array.filter()
删除空列中的项目。
const removeEmptyColumns = arr => {
// detect empty columns
const emptyColumns = (arr[0] || []).map((c, i) => arr.some(a => a[i]))
// filter empty columns
return arr.map(a => a.filter((_, i) => emptyColumns[i]))
}
pp(removeEmptyColumns([["", "2", "", ""], ["", "3", "", ""], ["", "", "4", ""]]))
pp(removeEmptyColumns( [["1", "2", "", "4"], ["", "3", "", ""], ["", "", "", "2"]]
))
function pp(d) {
console.log(JSON.stringify(d))
}