如何从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
});
}
答
obj.filter不是一个函数,但obj.selected.filter应为(obj是一个对象,而不是阵列)。
默认情况下,它不能在IE7中工作我猜你必须从Mozilla开发者网络(MDN)复制polyfill或使用Modernizr。
答
可能是你可以试试这个(如果你想填充一个选择从一个阵列的一些选项)
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。
我认为你最好使用jQuery的$ .filter()(http://api.jquery.com/filter/)方法,该方法适用于所有浏览器。 – Andy 2012-07-27 13:46:03