如何从javascript对象中删除空值

如何从javascript对象中删除空值

问题描述:

我有一个包含两个数组的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

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

可能是你可以试试这个(如果你想填充一个选择从一个阵列的一些选项)

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