我正在尝试使用splice()
函数删除空数组元素(来自 csv 文件)。
数组元素存储在csv.data
:
csv.data.forEach(function(item,index) {
if (item.length < 2) { // don't want anything less than two
csv.data.splice(index,1);
}
});
这样可行,但它仍然在 csv 文件中返回两个空数组(行),最初有六个空行,但它会跳过两个空行。
我做错了吗?
这是csv.data
[
[
"1212",
"okay",
""
],
[
""
],
[
""
],
[
""
],
[
""
],
[
""
],
[
""
]
]
预期
[
[
"1212",
"okay",
""
],
]
答案 0 :(得分:6)
在循环中使用拼接不是一个好主意。你可以错过一些索引。
您可以使用filter
功能代替forEach
var csv = { data: [["1212", "okay", ""], [""], [""], [""], [""], [""], [""]] };
csv.data = csv.data.filter(items => items.length > 1);
console.log(csv.data);
&#13;
答案 1 :(得分:1)
如果您还想从顶部数组中删除空元素,则可以执行另一个过滤器。
例如
const a = [ [ "1212", "okay", "" ], [ "" ], [ "" ], [ "" ], [ "" ], [ "" ], [ "" ] ];
const ret1 = a.map((b) => b.filter((f) => f));
console.log(ret1);
//if you also want to remove empty elements from top array.
const ret2 = ret1.filter((f) => f.length);
console.log(ret2);
答案 2 :(得分:0)
您可以从末尾迭代数组并拼接而不会与索引发生冲突。
var array = [["1212", "okay", ""], [""], [""], [""], [""], [""], [""]],
i = array.length;
while (i--) {
if (array[i].length < 2) {
array.splice(i, 1);
}
}
console.log(array);
&#13;