【问题标题】:Removing empty strings from array in javascript在javascript中从数组中删除空字符串
【发布时间】:2014-09-29 13:03:40
【问题描述】:

我需要帮助来了解我的代码中发生了什么。我计划编写一个函数,该函数接受一个字符串并删除所有字母。输入将是字母和数字的组合。我希望此函数返回字符串中找到的所有数字的数组。我已经成功写了一些东西(在stackoverflow的帮助下):

number = "32321FDFDS 44"
arr = number.replace(/[A-Za-z]/g," ").split(" ")



for(var i = arr.length - 1; i >= 0; i--){
     if(arr[i] == "") {
          arr.splice(i, 1);
    }
}

返回

[ '32321', '44' ]

这对现在来说是完美的。我的问题是我不明白 arr.splice(i,1) 是如何删除空字符串的。删除arr 中的空字符串是没有意义的。有人可以帮我理解这一点吗?

【问题讨论】:

  • 它从数组中删除元素。在您的情况下,空字符串是数组中的一个元素。

标签: javascript arrays string


【解决方案1】:

测试:

if (arr[n] == "") // if item `n` within `arr` array `==` `""` , do stuff

Array.prototype.splice()

数组中有两个项目:

var arr = ["123", ""];
if (arr[0] == "") {
  arr.splice(0,1);
} else {
  console.log(arr); // ["123", ""];
};
if (arr[1] == "") {
  arr.splice(1,1);
  console.log(arr); // ["123"]
};

【讨论】:

    【解决方案2】:

    与返回新数组的其他方法不同,保留原始变量,.splice method 对数组进行变异,对其进行就地更改。

    语句arr.splice(i, 1); 表示从位置i 开始从数组arr 中删除一项。 if(arr[i] == "") 表示如果位置 i 的项目是空字符串,则执行此块内的内容。因此,当if 语句为真时,该项目将从数组中删除。

    也就是说,除非你需要支持 ES3 浏览器(这实际上意味着 IE8 或更低版本),而不是像那样循环遍历数组,我只会使用 .filter method

    var number = "32321FDFDS 44",
      arr = number.replace(/[A-Za-z]/g," ").split(" ").filter(function (item) {
        return !!item; // all strings except an empty string will coerce to true
      });
    
    console.log(arr);
    

    jsFiddle

    如果您只是尝试从没有其他要求的字符串中提取数字字符串数组,那么更简洁的方法是只拆分一个或多个非数字:

    var number = "32321FDFDS 44",
      arr = number.split(/\D+/);
    
    // arr is now [ "32321", "44" ]
    console.log(arr);
    

    这一步完成,根本不需要过滤掉空字符串。

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 2018-04-12
      相关资源
      最近更新 更多