2016-04-24 126 views
0

我有以下的javascript的console.log(陣列)返回空,但執行console.log(array.length)不返回0

var filtered = []; 

$('#footballCheck').on('change', function() { 
    if ($('#footballCheck').is(':checked')) { 
    for (var i = 0; i < fa_names.length; i++) { 
     if (fa_names[i]["facility_activity"].toLowerCase().indexOf("football") >= 0) { 
     filtered.push(fa_names[i]); 
     } 
    } 

    filtered.sort(SortByName); 
    $('#mCSB_1_container').empty(".facility-name"); 
    for (var k = 0; k < filtered.length; k++) { 
     $('#mCSB_1_container').append('<div class="row facility-name">\ 
              <button class="btn btn-default btn-fill btn-menu" date-name="' + filtered[k]["facility_name"] + '">' + filtered[k]["facility_name"] + '</button></div>'); 
     $('#facilities-body').mCustomScrollbar("update"); 
    } 
    } else { 
    for (var j = 0; j < filtered.length; j++) { 
     if (filtered[j]["facility_activity"].toLowerCase().indexOf("football") >= 0) { 
     delete filtered[j]; 
     } 
    } 
    console.log(filtered); 
    console.log(filtered.length); 
    if (filtered.length > 0) { 
     filtered.sort(SortByName); 
     $('#mCSB_1_container').empty(".facility-name"); 
     for (var k = 0; k < filtered.length; k++) { 
     $('#mCSB_1_container').append('<div class="row facility-name">\ 
               <button class="btn btn-default btn-fill btn-menu" date-name="' + filtered[k]["facility_name"] + '">' + filtered[k]["facility_name"] + '</button></div>'); 
     $('#facilities-body').mCustomScrollbar("update"); 
     } 
    } else { 
     $('#mCSB_1_container').empty(".facility-name"); 
     for (k = 0; k < fa_names.length; k++) { 
     $('#mCSB_1_container').append('<div class="row facility-name">\ 
               <button class="btn btn-default btn-fill btn-menu" date-name="' + fa_names[k]["facility_name"] + '">' + fa_names[k]["facility_name"] + '</button></div>'); 
     $('#facilities-body').mCustomScrollbar("update"); 
     } 
    } 
    } 
}); 

認爲應該做到以下幾點:

  • 如果複選框被選中,經過另一個數組並推動其鍵值的所有對象「facility_activity」包含「足球」到filtered陣列
  • 如果未被選中,然後從filtered數組,其鍵值「facility_act刪除所有對象ivity」包含‘足球’
  • 如果沒有選擇其長度爲> 0(意味着仍有過濾的對象)打印那些
  • 如果沒有選擇和filtered數組爲空,然後追加從所有項目父數組(未過濾的數組)

這是fiddle

背景:複選框充當搜索的過濾器,filtered數組存儲這些過濾的值(除了那個小提琴filtered數組被更改之外,沒有其他位置)。

我的問題是console.log(filtered)返回[]console.log(filtered.length)不會返回0它應該。爲什麼會發生這種情況,我該如何解決?

+1

您使用'delete'從數組中刪除元素,使用'splice'。 – Tushar

+1

代碼**在**問題中,而不僅僅是鏈接。 –

+0

如果您希望回覆有關重複的內容,請將其作爲評論,而不是將其添加到問題中。你是對的,另一個問題不是真的重複。但是,如果您立即發佈相關代碼,並且確保代碼是一個[最小示例](http://stackoverflow.com/help/mcve),可以準確地再現問題,那麼您會得到更好的接收。 – 2016-04-24 16:34:11

回答

1

delete on array不改變數組的length。它只是將元素值設置爲undefined。使用splice從陣列中移除元素。

相關問題