【问题标题】:how to delete the last elements of an array in js [duplicate]如何在js中删除数组的最后一个元素[重复]
【发布时间】:2018-07-01 15:50:16
【问题描述】:

我有一个二维数组,其中最后一个元素是空的。 像这样:

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()
  • 你想要的输出是什么?是data = [["1","2","3"],["4","5","6","x","f"],["7","8","9"]]吗?
  • 将它们与空字符串(即=== "")进行比较,或检查它们的长度(即.length === 0)。没有 isEmpty() 这样的东西,除非你自己构建。
  • 巧合的是,所有的空元素都是最后一个。但如果你只是想删除空的(不一定是最后一个),那么也许:noEmptys = data.map(subarray => subarray.filter(Boolean)).filter(arr => arr.length)?
  • @R98 你想让data[2].length 成为5,即使它只有3 个元素?还是你的意思是data[1].length

标签: javascript arrays


【解决方案1】:

您可以使用Boolean 过滤后映射数组作为保留truthy 元素的回调。

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

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

console.log(data);

【讨论】:

  • 使用Boolean很聪明。
  • thanks 非常适用于整个数组,但如果我尝试只使用像 data[2] = data[2].map(a => a.filter 这样的内部数组,则不适用于我(布尔值))
  • @R98,然后只过滤数组,就像data[2] = data[2].filter(Boolean);没有映射,因为你只有一个数组用于过滤。
【解决方案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[1]?因为遗憾的是它不适用于那个
  • 只需在该阵列上使用filter。地图用于完成所有这些操作
【解决方案3】:

使用.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);

【讨论】:

    【解决方案4】:

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

    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);
    

    【讨论】:

      【解决方案5】:
      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);
      

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

      【讨论】:

        猜你喜欢
        • 2020-07-04
        • 2014-12-09
        • 2020-02-04
        • 2012-01-05
        • 1970-01-01
        • 2020-11-27
        • 2019-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多