0

我有一个包含两个数组的 javascript 对象。有时其中一个数组可能为空。我正在尝试通过递归函数遍历对象,但我不希望任何为空或空字符串的数组进入循环。到目前为止我所拥有的是产生错误Typeerror: obj.filter is not a function

注意:在这个例子中,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
    });
}
4

2 回答 2

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);

演示

于 2012-07-27T14:05:49.900 回答
0

obj.filter 不是函数,但 obj.selected.filter 应该是(obj 是一个对象,而不是数组)。

我猜默认情况下它在 IE7 中不起作用,您要么必须从 Mozilla 开发者网络 ( MDN ) 复制 polyfill,要么使用 Modernizr。

于 2012-07-27T13:40:34.883 回答