如何在JS中删除数组的最后一个元素

3
我有一个二维数组,其中最后的元素为空。就像这样:
data = [["1","2","3","","",""],["4","5","6","x","f",""],["7","8","9","",""]]

现在我想删除空元素并使用 .length 获取正确的新大小。
我尝试过这样做,但它不起作用:
        for (i = 0; i != data[2].length-1; i++) {
            if (data[2][i].isEmpty()) {
                data[2] = data[2].splice(i, 1);
            }
        }

有没有好的解决方案?

请查看pop() - Herohtar
你想要的输出是什么?是 data = [["1","2","3"],["4","5","6","x","f"],["7","8","9"]] 吗? - Joseph Marikle
将它们与空字符串进行比较(即 === ""),或检查它们的长度(即 .length === 0)。除非你自己构建了它,否则不存在 isEmpty() - Heretic Monkey
1
巧合的是,所有空元素都是最后一个。但如果你只想删除空元素(不一定是最后一个),那么也许可以使用以下代码: noEmptys = data.map(subarray => subarray.filter(Boolean)).filter(arr => arr.length) - CRice
1
@R98 你希望 data[2].length5,即使它只有3个元素吗?还是你的意思是 data[1].length - CRice
显示剩余2条评论
5个回答

6
您可以在使用Boolean作为回调函数过滤后,将数组映射为保留真值元素。

var data = [["1", "2", "3", "", "", ""], ["4", "5", "6", "x", "f", ""], ["7", "8", "9", "", ""]];

data = data.map(a => a.filter(Boolean));

console.log(data);


使用Boolean非常聪明。 - ryanpcmcquen
谢谢,对整个数组完美地起作用,但如果我尝试只使用内部数组,像 data[2] = data[2].map(a => a.filter(Boolean)) 这样的方式对我来说不起作用。 - R98
1
@R98,那么只需过滤数组,例如 data[2] = data[2].filter(Boolean); 而不需要映射,因为你只有一个要过滤的数组。 - Nina Scholz

2
for() 循环中拼接是棘手的,因为数组长度会改变。
使用 map()filter()

let data = [["1","2","3","","",""],["4","5","6","x","f",""],["7","8","9","",""]]

data = data.map(arr => arr.filter(e => e.trim()));  

console.log(JSON.stringify(data))


这段代码对整个数组完全有效,但我如何仅针对data中的一个数组使用它?例如data[1]?因为它不幸地不能与之一起使用。 - R98
只需在该数组上使用“filter”。map用于执行所有操作。 - charlietfl

1
使用 .map.filter

const data = [
  ['1', '2', '3', '', '', ''],
  ['4', '5', '6', 'x', 'f', ''],
  ['7', '8', '9', '', ''],
];

const cleanData = data.map(arr => arr.filter(value => value || false));

console.log(cleanData);


0

箭头函数很优雅,但目前不完全支持,所以可能以下方法更好:

const data = [
    ['1', '2', '3', '', '', ''],
    ['4', '5', '6', 'x', 'f', ''],
    ['7', '8', '9', '', ''],
];

const filteredData = data.map(function (arr) {
    return arr.filter(Boolean);
});


console.log(filteredData);

0
var data = [["1","2","3","","",""],["4","5","6","x","f",""],["7","8","9","",""]];
var i;

for(i = 0; i < data[2].length; i++){
  if(data[2][i] == '')
  {
    var temp = data[2].slice(0,i);
    break;
  }
}

console.log(temp);

如果你想保持相同的数据结构和模式,使每个数组在末尾拥有一系列空字符串,这将找到第一个空字符串并截去其余部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接