2012-07-27 32 views
0

我有一個包含兩個數組的javascript對象。有時候其中一個數組可能是空的。我試圖循環通過遞歸函數的對象,但我不希望任何數組是空的或空字符串進入循環。我到目前爲止所產生的錯誤是Typeerror: obj.filter is not a function如何從javascript對象中刪除空值

注意:obj在這個例子裏面有兩個數組,但實際上,它可以是我傳入函數的任何東西。

var obj = { 
    selected: [ "value1", "value"2], 
    unselected: [] 
} 

function clearAndSetSelectElement($elem, obj, isEmpty) { 
    if(isEmpty) $elem.empty(); //empty the select element if it isn't empty 
    $.each(obj.filter(function(v){return v != null}), function() { //filter out empty arrays or empty strings 
     if(this instanceof Array) clearAndSetSelectElement($elem, this, false); //if this is an array make recursive call 
     $elem.append("<option />").val(this).text(this)); //append value to select element 
    }); 
} 
+0

我認爲你最好使用jQuery的$ .filter()(http://api.jquery.com/filter/)方法,該方法適用於所有瀏覽器。 – Andy 2012-07-27 13:46:03

回答

0

obj.filter不是一個函數,但obj.selected.filter應爲(obj是一個對象,而不是陣列)。

默認情況下,它不能在IE7中工作我猜你必須從Mozilla開發者網絡(MDN)複製polyfill或使用Modernizr。

+0

obj是一個變量,所以它不會總是被obj.selected。我真的可以傳入任何東西。我希望能夠過濾出任何空的數組或空值傳入循環 – bflemi3 2012-07-27 13:41:56

+0

是的,我在此期間意識到,看看這個問題:http://stackoverflow.com/questions/5072136/javascript-filter - 適用對象 – Aadaam 2012-07-27 13:44:06

0

可能是你可以試試這個(如果你想填充一個選擇從一個陣列的一些選項)

HTML

<select id="sel"></select>​ 

JS

function setSelect(elem, obj) 
{ 
    for(var o in obj) 
    { 
     if(obj[o] instanceof Array && obj[o].length) 
     { 
      $.each(obj[o], function(key, value) { 
       elem.append($("<option></option>").attr("value",value).text(value)); 
      }); 
     } 
    } 
} 

填充選用setSelect功能

var obj = { 
    selected: [ "value1", "value2"], 
    unselected: [] 
} 

var elem=$('#sel');    
setSelect(elem, obj); 

DEMO