在Javascript上

时间:2018-03-22 13:14:33

标签: javascript csv

我正在尝试使用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",
  ""
 ],
]

3 个答案:

答案 0 :(得分:6)

在循环中使用拼接不是一个好主意。你可以错过一些索引。 您可以使用filter功能代替forEach

&#13;
&#13;
var csv = { data: [["1212", "okay", ""], [""], [""], [""], [""], [""], [""]] };

csv.data = csv.data.filter(items => items.length > 1);

console.log(csv.data);
&#13;
&#13;
&#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)

您可以从末尾迭代数组并拼接而不会与索引发生冲突。

&#13;
&#13;
var array = [["1212", "okay", ""], [""], [""], [""], [""], [""], [""]],
    i = array.length;
    
while (i--) {
    if (array[i].length < 2) {
        array.splice(i, 1);
    }
}

console.log(array);
&#13;
&#13;
&#13;