jquery或javascript如何查找数组是否包含对象,并且该对象具有指定值的名称

时间:2014-04-18 18:06:42

标签: javascript jquery arrays object

我正在尝试构建一个对象数组,以便在cookie中保存菜单的状态,但它没有更新,因为它没有找到包含我需要更新可见性的对象的正确索引。我做错了什么和/或你能指出我正确的方向吗?

$(document).ready(function() {
    var menu = new Array();
    $("#vertical-nav .head").click(function() {
        var c = $(this).next().attr('name');
        $(this).next().slideToggle("slow", function() {
            if ( $(this).next().is(':visible') ) {
                menu.push({
                    name: c,
                    visible: true,
                });
            } else {
                var index = $.inArray(c, menu);
                console.log("INDEX: " + index);
                menu[index] = { name: c, visible:false };
            }
        });
        console.log(menu);
    });
});

这就是我最终的目标:

$(document).ready(function() {
    var menu = new Array();
    if ( $.cookie('menu') ) {
        var items = JSON.parse($.cookie('menu'));
        for ( var item in items ) {
            if ( items[item].visible ) {
                $("div[name='" + items[item].name + "']").show();
            }
            menu.push(items[item]);
        }
    }

    $("#vertical-nav .head").click(function() {
        var c = $(this).next().attr('name');
        if ( $(this).next().is(":visible") ) {
            hide(this, c);
        } else {
            show(this, c);
        }
    });

    function show(obj, c) {
        $(obj).next().slideDown('slow', function() {
            var elementExists = false;
            if ( menu.length > 0 ) {
                for ( var item in menu ) {
                    if ( menu[item].name == c ) {
                        elementExists = true;
                        menu[item].visible = true;
                    }
                }
            }
            if ( !elementExists ) {
                menu.push({
                    name: c,
                    visible: true,
                });
            }
            $.cookie('menu', JSON.stringify(menu));
        });
    }

    function hide(obj, c) {
        $(obj).next().slideUp('slow', function() {
            if ( menu.length > 0 ) {
                for ( var item in menu ) {
                    if ( menu[item].name == c ) {
                        menu[item].visible = false;
                    }
                }
            }
            $.cookie('menu', JSON.stringify(menu));
        });
    }
});

1 个答案:

答案 0 :(得分:1)

您可以轻松地执行此操作:

if (menu.length > 0) {
    for (var item in menu) {
        if (menu[item].name=="some text") alert("Found it!");
    }
}

我要考虑的是代替[{name: "item"; visible: true}]切换到键/值对。然后,您可以使用{"item": true},但这仅限于存储可见值,并且密钥中不能存储额外信息。要解决此问题,请尝试{" item":{visible:true}}。以下是使用此方法在JS中检测的示例:

if (menu.length > 0) {
    for (var item in menu) {
        var strVisible="hidden";
        if (menu[item].visible==true) strVisible="visible";
        alert(item+" is "+strVisible);
    }
}