如何使用Javascript删除多维数组中的空元素



这里的初级程序员正试图构建一个让我的生活更轻松的工具。我可以从谷歌表单中提取数据,但它看起来像下面的数组,在我想要捕捉的元素(Person、Person2等(中和周围都有很多空元素。这是由于工作表的格式,我将无法删除它周围的空单元格。

var array = [[Person1,, Age1,, Address1], [,,,,], [Person2,, Age2,, Address2], [,,,,] ...]

我认为有一种简单的方法可以过滤数组并删除空/null项。但是我尝试使用.filter((和嵌套用于循环都没有成功。有人能帮助找到一个没有空项的多维数组的最佳方法吗?

您可以使用reduce函数并删除nullarraylength为零的项

var arr = [["Person1", null, "Age1", null, "Address1"]
, [null, null, null, null, null]
, ["Person2", null, "Age2", null, "Address2"],
[null, null, null, null, ["t"]]]
function reducer(res, item) {
if (!item) return res;
if (Array.isArray(item)) {
var obj = item.reduce(reducer, [])
if (obj.length > 0) {
res.push(obj)
}
return res;
}
res.push(item);
return res;
}
var res = arr.reduce(reducer , [])
console.log(res)

幸运的是,您只有一个2D数组,它是1D数组的列表。

让我们从1D阵列开始:

var row = ['a','b',,'c',,];

// via a loop:
var new_row = [];
for (cel in row) if (row[cel]) new_row.push(row[cel]);
console.log(new_row); // ['а', 'b', 'c']

// via a filter() function:
var new_row_f = row.filter((cel) => cel);
console.log(new_row_f); // ['a', 'b', 'c']

这是一个2D阵列:

var table = [['a1','b1',,'c1',,],[,,,,,],['a2','b2',,'c2',,]]

// via nested loops:
var new_table = []
for (var row=0; row<table.length; row++) {
var new_row = [];
for (var cel=0; cel<table[row].length; cel++) {
var new_cel = table[row][cel];
if (new_cel) new_row.push(new_cel);
}
if (new_row.join("")!="") new_table.push(new_row);
}
console.log(new_table); // [ [ 'a1', 'b1', 'c1' ], [ 'a2', 'b2', 'c2' ] ]

// via a chain of filter() & map(filter()) functions:
var new_table_f = table.filter(row => row.join("") != "")
.map(row => row.filter((cel) => cel));
console.log(new_table_f); // [ [ 'a1', 'b1', 'c1' ], [ 'a2', 'b2', 'c2' ] ]

相关内容

  • 没有找到相关文章

最新更新