39

我有一个数组["Lorem", "", "ipsum"]。我想从此数组中删除空字符串并获取["Lorem", "ipsum"].

有没有办法在不使用循环并遍历每个元素并删除它的情况下做到这一点?

4

5 回答 5

70

您可以使用filter

var newArray = oldArray.filter(function(v){return v!==''});

MDN有一个解决 IE8 兼容性的方法。如果您不打算filter在其他任何地方使用,您也可以使用一个好的旧循环,循环没有问题......

于 2013-01-22T07:38:22.317 回答
13

如果您使用 Javascript 1.6(可能无法在 IE8 或更低版本上运行),您可以使用

arr.filter(Boolean) //filters all non-true values

例如。

console.log([0, 1, false, "", undefined, null, "Lorem"].filter(Boolean));
// [1, "Lorem"]

于 2014-01-30T15:55:32.943 回答
9

另一种选择是使用 jquery 的.map()函数:

var newArray = $.map( oldArray, function(v){
  return v === "" ? null : v;
});
于 2013-01-22T07:44:47.363 回答
8
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">

function cleanArray(actual)
{
    var newArray = new Array();
    for(var i = 0; i<actual.length; i++)
    {
        if (actual[i])
        {
            newArray.push(actual[i]);
        }
    }
    return newArray;
}

$(function()
{
    var old = ["Lorem", "", "ipsum"];

    var newArr = cleanArray(old);

    console.log(newArr)
});
</script>

无循环

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">

$(function()
{
    var arr = ["Lorem", "", "ipsum"];

    arr = $.grep(arr,function(n){
        return(n);
    });

    console.log(arr)
});
</script>

两者都经过测试。

于 2013-01-22T07:41:57.227 回答
0

var arr = [ a, b, c, , e, f, , g, h ];

arr = jQuery.grep(arr, function(n){ return (n); });

arr 现在是 [a, b, c, d, e, f, g];

于 2014-10-28T14:12:48.703 回答