0

2 つの配列を含む JavaScript オブジェクトがあります。配列の 1 つが空である場合があります。再帰関数を使用してオブジェクトをループしようとしていますが、空または空の文字列である配列をループに入れたくありません。これまでのところ、エラーが発生していますTypeerror: obj.filter is not a function

: この例の obj には内部に 2 つの配列がありますが、実際には、関数に渡すものであれば何でもかまいません。

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

obj.filter は関数ではありませんが、obj.selected.filter は関数であるべきです (obj は配列ではなくオブジェクトです)。

デフォルトでは IE7 では動作しません。Mozilla Developer's Network ( MDN )からポリフィルをコピーするか、Modernizr を使用する必要があります。

于 2012-07-27T13:40:34.883 に答える
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 に答える