2013-01-22 42 views
30

Tôi có một mảng ["Lorem", "", "ipsum"]. Tôi muốn xóa chuỗi rỗng khỏi mảng này và nhận được ["Lorem", "ipsum"].xóa một chuỗi rỗng khỏi mảng chuỗi - JQuery

Có cách nào để thực hiện điều này mà không sử dụng vòng lặp và truyền tải qua từng phần tử và xóa nó không?

+0

khi bạn đề cập đến "vòng lặp và vượt qua", bạn có nghĩa là vòng vani JavaScript truyền thống phải không? –

Trả lời

49

Bạn có thể sử dụng filter:

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

The MDN có một cách giải quyết cho phù hợp IE8. Bạn cũng có thể sử dụng một vòng lặp cũ tốt nếu bạn đang không sử dụng bất cứ nơi nào khác filter, không có vấn đề với vòng lặp ...

+1

trích dẫn "không có vấn đề gì với vòng lặp ...", tốt, ngoại trừ việc lặp lại có thể (không phải luôn luôn) rất chậm. bạn đã từng cố gắng bổ sung hàm indexOf() gốc với một vòng lặp trong js-fiddle. Cho phép chỉ nói indexOf là magnitudes nhanh hơn. – macguru2000

6
<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>

Without Vòng

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

Cả hai được thử nghiệm.

+0

xem câu trả lời cập nhật .. –

7

Một lựa chọn khác là sử dụng .map() chức năng của jquery:

var newArray = $.map(oldArray, function(v){ 
    return v === "" ? null : v; 
}); 
7

Nếu bạn sử dụng Javascript 1.6 (có lẽ wont work trên IE8 hoặc ít hơn), bạn có thể sử dụng

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

ví dụ.

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

0

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

arr = jQuery.grep (arr, hàm (n) {return (n);});

arr hiện là [a, b, c, d, e, f, g];