javascript - 检查数组中链接的单击是否有子菜单键值。 IF true 运行一些代码 ELSE 运行其他代码

标签 javascript arrays

我有一个对象 linkItems,其中包含一个数组。我不确定如何检查单击的链接(如果有子菜单),然后运行一些代码,例如不要关闭菜单,否则运行关闭菜单?

                            <ul class="main-nav" onclick="{!c.onClick}">
                                <aura:iteration items="{!v.linkItems}" var="item" indexVar="i">
                                        <aura:if isTrue="{!item.subMenu}">
                                            <li>
                                                <a data-menu-item-id="{!item.id}" href="JavaScript:Void(0);">{!item.label}</a>
                                            <ul>
                                                <aura:iteration items="{!item.subMenu}" var="subItem" indexVar="id">
                                                    <li><a data-menu-item-id="{!subItem.id}" href="#">{!subItem.label}</a></li>
                                                </aura:iteration>
                                            </ul>
                                            </li>
                                        <aura:set attribute="else">
                                                <li><a data-menu-item-id="{!item.id}" href="">{!item.label}</a></li>
                                        </aura:set>
                                        </aura:if>
                                    </aura:iteration>
                            </ul>

当我 console.log var linkItems 时,返回的是:

> Proxy {0: {…}, 1: {…}, 2: {…}, 3: {…}, 4: {…}, 5: {…}, 6: {…}, 7: {…}, 8: {…}}
    > [[Handler]]: Object

        [[Target]]: Array(9)
        > 0: {id: 0, label: "Home", active: false}

        1: {id: 1, label: “About”, active: false}

        2: {id: 2, label: “Page3”, active: false}
        
3: {id: 3, label: “Page4”, active: false}

        4: {id: 4, label: “Page5”, active: false}

        5: {id: 5, label: “Page6”, active: true}

        6: {id: 6, label: "Page7”, active: false}

        7: {id: 10, label: "Support Pages", subMenu: Array(3), active: false}

        8: {id: 15, label: "More", subMenu: Array(4), active: false}
length: 9
__proto__: Array(0)

    * [[IsRevoked]]: false

更新的代码:

    onClick : function(component, event, helper) {
        var linkItems = component.get('v.linkItems'); //array of linkItems
        console.log('linkItems', linkItems);
        var id = event.target.dataset.menuItemId;
        console.log(id, 'id');
        console.log(JSON.stringify(event.target.dataset)); //returns menuItemId
        component.set("v.selected",parseInt(id)); //sets v.selected to selected menu item id
        if (id) {

            // var linkItems = linkItems.reduce(function (acc, it) {
            //     return acc[it.id] = it, acc;
            // }, {});

            linkItems.map(function (item) {
                return item.subMenu && item.subMenu.length ? 'open' : function() {component.getSuper().navigate(id)};
            });

            //console.log(linkItems);

            //component.getSuper().navigate(id);

            // console.log('idArray', JSON.stringify(linkItems));
            // console.log(linkItems[id].id);
            // console.log('label', linkItems[id].label);
            // console.log(linkItems[id].subMenu);
            // console.log('linkItems.id', linkItems.id);
        }
    }, 

这仍然不起作用。单击时,我需要检查所单击链接的 ID,然后检查它是否有子菜单。

TIA。

最佳答案

使用Array.filter:

let itemsWithSubMenu = linkItems.filter(f => f.subMenu && f.subMenu.length);

关于javascript - 检查数组中链接的单击是否有子菜单键值。 IF true 运行一些代码 ELSE 运行其他代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58456595/

相关文章:

javascript - Underscore.js _.where 查找子对象

Javascript 模式 : Conditional event handler

c - 打印字符串时出错

c++ - 你不能用双指针引用二维数组吗?

javascript - 如何使用 bool 值在ant design复选框中呈现默认值?

Javascript systemJS 错误找不到模块

arrays - 使用 json_array_elements(json) 并获取项目排名

javascript - 找出能被 3 整除的 3 个数的最大和

C++ : Copy Array of Structure and return the array of structure

javascript - Angular HTTPClient POST正文不发送