Kiểm tra xem mảng trống hay rỗng


106

Tôi muốn biết cách kiểm tra xem một mảng trống hay rỗng trong jQuery. Tôi đã thử array.length === 0nhưng nó không hoạt động. Nó cũng không gây ra bất kỳ lỗi nào.

Đây là mã:

var album_text = new Array();

$("input[name='album_text[]']").each(function(){
  if( $(this).val() &&  $(this).val() != '') {
    album_text.push($(this).val());
  }
});
if (album_text.length === 0) {
  $('#error_message').html("Error");
}

else {
  // send data
}

2
Cách tương tự như trong "JavaScript bình thường": stackoverflow.com/questions/2672380/...
Julien Schmidt

1
@Julien, tôi đã thử tất cả các giải pháp được liệt kê trong chủ đề đó trước khi bắt đầu chủ đề này. Không ai trong số họ làm việc bằng cách nào đó.
nhập

Chúng ta có thể lấy thêm một số mã cho ngữ cảnh không? Xung quanh JavaScript, HTML? Bạn có chắc rằng đó $("input[name='album_text[]']")thực sự là các phần tử trả về?
Jon Adams

@JulienSchmidt: câu hỏi mà bạn liên kết đến là kiểm tra xem một giá trị mảng có trống không, không phải toàn bộ mảng.
Dan Dascalescu

Câu trả lời:


168

Miễn là bộ chọn của bạn thực sự hoạt động, tôi thấy mã kiểm tra độ dài của mảng của bạn không có gì sai. Điều đó sẽ làm những gì bạn muốn. Có rất nhiều cách để làm sạch mã của bạn để trở nên đơn giản và dễ đọc hơn. Đây là phiên bản đã được làm sạch với các ghi chú về những gì tôi đã dọn dẹp.

var album_text = [];

$("input[name='album_text[]']").each(function() {
    var value = $(this).val();
    if (value) {
        album_text.push(value);
    }
});
if (album_text.length === 0) {
    $('#error_message').html("Error");
}

else {
  //send data
}

Một số ghi chú về những gì bạn đang làm và những gì tôi đã thay đổi.

  1. $(this)luôn là một đối tượng jQuery hợp lệ nên không có lý do gì để kiểm tra if ($(this)). Nó có thể không có bất kỳ đối tượng DOM nào bên trong nó, nhưng bạn có thể kiểm tra điều đó $(this).lengthnếu cần, nhưng điều đó không cần thiết ở đây vì .each()vòng lặp sẽ không chạy nếu không có mục nên $(this)bên trong .each()vòng lặp của bạn sẽ luôn có một cái gì đó.
  2. Sẽ không hiệu quả nếu sử dụng $ (this) nhiều lần trong cùng một hàm. Tốt hơn nhiều là đưa nó một lần vào một biến cục bộ và sau đó sử dụng nó từ biến cục bộ đó.
  3. Bạn nên khởi tạo mảng bằng []thay vì new Array().
  4. if (value)khi giá trị được kỳ vọng sẽ là một chuỗi sẽ vừa bảo vệ từ value == null, value == undefinedvalue == ""do đó bạn không cần phải làm if (value && (value != "")). Bạn chỉ có thể làm: if (value)để kiểm tra tất cả ba điều kiện trống.
  5. if (album_text.length === 0) sẽ cho bạn biết liệu mảng có trống không miễn là nó là một mảng hợp lệ, được khởi tạo (nó ở đây).

Bạn đang cố gắng làm gì với bộ chọn này $("input[name='album_text[]']")?


5
@MaciekSemik - xem stackoverflow.com/questions/359494/… . Tôi luôn sử dụng bình đẳng nghiêm ngặt ( ===) trừ khi tôi muốn đặc biệt cho phép chuyển đổi kiểu. Đó là một thói quen tốt để có được.
jfriend00

73

Người dùng JQuery là EmptyObject để kiểm tra xem mảng có chứa các phần tử hay không.

var testArray=[1,2,3,4,5];
var testArray1=[];
console.log(jQuery.isEmptyObject(testArray)); //false
console.log(jQuery.isEmptyObject(testArray1)); //true

2
Đáng tin cậy hơn nhiều so với việc kiểm tra độ dài, đặc biệt nếu biến của bạn cũng có thể là một đối tượng (với các đối tượng, độ dài không hoạt động để kiểm tra xem có trống không).
phóng khoáng

Đây là câu trả lời thích hợp hơn theo ý kiến ​​của tôi.
Earl3s

4
isEmptyObjectluôn trả về falsenếu Array.prototypeđược mở rộng, ví dụ Array.prototype.someFunction = function () {};- ngay cả khi mảng trống. Lưu ý rằng một số khuôn khổ (ví dụ: Ember.js) mở rộng nguyên mẫu Array theo mặc định.
jesenko

4
Hãy cẩn thận với isEmptyObject! Đối với jQuery 1.8.3 jQuery.isEmptyObject([])trả về false, nhưng đối với jQuery 1.11.3 thì trả về true. Trên thực tế, tài liệu jQuery cho biết Đối số phải luôn là Đối tượng JavaScript đơn giản vì các loại đối tượng khác (phần tử DOM, chuỗi / số nguyên thủy, đối tượng máy chủ) có thể không cho kết quả nhất quán trên các trình duyệt. Xin lỗi, không thấy câu trả lời của @rhinoxi.
Dmitry Vershinin

8

Bạn nên kiểm tra ''(chuỗi trống) trước khi đẩy vào mảng của bạn. Mảng của bạn có các phần tử là chuỗi trống. Sau đó, bạn album_text.length === 0sẽ làm việc tốt.


Vui lòng xem mã đã cập nhật. Tôi đã thêm mã này if( $(this).val() && $(this).val() != '') nhưng nó không hoạt động.
đầu vào

8

Tôi nghĩ rằng thật nguy hiểm khi sử dụng $ .isEmptyObject từ jquery để kiểm tra xem mảng có trống hay không, như @jesenko đã đề cập. Tôi vừa gặp vấn đề đó.

Trong tài liệu isEmptyObject , nó đề cập đến:

Đối số phải luôn là một Đối tượng JavaScript đơn giản

mà bạn có thể xác định bằng cách $.isPlainObject. Sự trở lại của $.isPlainObject([])là sai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.