首页 > 解决方案 > 如何在 javascript 或 vue 中在多个对象上迭代一个循环

问题描述

基本上,我正在重构我的路线部分。我正在像这样从一个文件中导出多个变量

export default {contactRoutes,userRoutes,customerRoutes}

他们我得到这样的对象

{
    "default": {
        "contactRoutes": [{
            "path": "/contacts",
            "name": "contacts",
            "component": {
                "methods": {},
                "components": {
                    "TableView": {
                        "methods": {},
                        "props": ["tableObj"],
                        "staticRenderFns": [],
                        "_compiled": true,
                        "__file": "resources/js/src/views/apps/table/TableView.vue"
                    },
                    "vSelect": {
                        "components": {
                            "Deselect": {
                                "staticRenderFns": [],
                                "_compiled": true
                            },
                            "OpenIndicator": {
                                "staticRenderFns": [],
                                "_compiled": true
                            }
                        },
                        "mixins": [{
                            "props": {
                                "autoscroll": {
                                    "default": true
                                }
                            },
                            "watch": {},
                            "methods": {}
                        }, {
                            "watch": {},
                            "methods": {}
                        }, {
                            "props": {
                                "loading": {
                                    "default": false
                                }
                            },
                            "watch": {},
                            "methods": {}
                        }],
                        "directives": {
                            "appendToBody": {}
                        },
                        "props": {
                            "value": {},
                            "components": {},
                            "options": {},
                            "disabled": {
                                "default": false
                            },
                            "clearable": {
                                "default": true
                            },
                            "searchable": {
                                "default": true
                            },
                            "multiple": {
                                "default": false
                            },
                            "placeholder": {
                                "default": ""
                            },
                            "transition": {
                                "default": "vs__fade"
                            },
                            "clearSearchOnSelect": {
                                "default": true
                            },
                            "closeOnSelect": {
                                "default": true
                            },
                            "label": {
                                "default": "label"
                            },
                            "autocomplete": {
                                "default": "off"
                            },
                            "reduce": {},
                            "selectable": {},
                            "getOptionLabel": {},
                            "getOptionKey": {},
                            "onTab": {},
                            "taggable": {
                                "default": false
                            },
                            "tabindex": {
                                "default": null
                            },
                            "pushTags": {
                                "default": false
                            },
                            "filterable": {
                                "default": true
                            },
                            "filterBy": {},
                            "filter": {},
                            "createOption": {},
                            "resetOnOptionsChange": {
                                "default": false
                            },
                            "clearSearchOnBlur": {},
                            "noDrop": {
                                "default": false
                            },
                            "inputId": {},
                            "dir": {
                                "default": "auto"
                            },
                            "selectOnTab": {
                                "default": false
                            },
                            "selectOnKeyCodes": {},
                            "searchInputQuerySelector": {
                                "default": "[type=search]"
                            },
                            "mapKeydown": {},
                            "appendToBody": {
                                "default": false
                            },
                            "calculatePosition": {}
                        },
                        "watch": {},
                        "methods": {},
                        "computed": {},
                        "staticRenderFns": [],
                        "_compiled": true
                    }
                },
                "staticRenderFns": [],
                "_compiled": true,
                "__file": "resources/js/src/views/apps/contacts/ContactsList.vue"
            },
            "title": "People",
            "meta": {
                "breadcrumb": [{
                    "title": "All Contacts",
                    "url": "/contacts"
                }, {
                    "title": "All Contacts",
                    "active": true
                }],
                "pageTitle": "Contacts",
                "rule": "admin",
                "authRequired": true
            }
        }, {
            "path": "/contacts/view/:id",
            "name": "contacts-view",
            "meta": {
                "breadcrumb": [{
                    "title": "All Contacts",
                    "url": "/contacts"
                }, {
                    "title": "All Contacts",
                    "url": "/contacts"
                }, {
                    "title": "View",
                    "active": true
                }],
                "pageTitle": "Contacts",
                "rule": "admin",
                "authRequired": true
            }
        }, {
            "path": "/contacts",
            "name": "contacts",
            "meta": {
                "breadcrumb": [{
                    "title": "All Contacts",
                    "url": "/contacts"
                }, {
                    "title": "All Contacts",
                    "active": true
                }],
                "pageTitle": "Contacts",
                "rule": "admin",
                "authRequired": true
            }
        }, {
            "path": "/contacts/view/:id",
            "name": "contacts-view",
            "meta": {
                "breadcrumb": [{
                    "title": "Customer",
                    "url": "/customers/view/1"
                }, {
                    "title": "Customer",
                    "url": "/customers/view/1"
                }, {
                    "title": "View",
                    "active": true
                }],
                "pageTitle": "Contacts",
                "rule": "admin",
                "authRequired": true
            }
        }, {
            "path": "/contacts/add/:customer_id",
            "name": "contacts-add",
            "meta": {
                "breadcrumb": [{
                    "title": "Customer",
                    "url": "/customers/view/1"
                }, {
                    "title": "Customer",
                    "url": "/customers/view/1"
                }, {
                    "title": "Add",
                    "active": true
                }],
                "pageTitle": "Contacts",
                "rule": "admin",
                "authRequired": true
            }
        }, {
            "path": "/contacts/edit/:id",
            "name": "contacts-edit",
            "meta": {
                "breadcrumb": [{
                    "title": "Customer",
                    "url": "/customers/view/1"
                }, {
                    "title": "Customer",
                    "url": "/customers/view/1"
                }, {
                    "title": "Edit",
                    "active": true
                }],
                "pageTitle": "Contacts",
                "rule": "admin",
                "authRequired": true
            }
        }],
        "userRoutes": [{
            "path": "/users",
            "name": "users",
            "meta": {
                "breadcrumb": [{
                    "title": "Users",
                    "url": "/users"
                }, {
                    "title": "All Users",
                    "active": true
                }],
                "pageTitle": "Users",
                "rule": "editor",
                "authRequired": true
            }
        }, {
            "path": "/users/user-add",
            "name": "user-add",
            "meta": {
                "breadcrumb": [{
                    "title": "All Users",
                    "url": "/users"
                }, {
                    "title": "All Users",
                    "url": "/users"
                }, {
                    "title": "Add User",
                    "active": true
                }],
                "pageTitle": "Users",
                "rule": "editor",
                "authRequired": true
            }
        }, {
            "path": "/users/view/:userId",
            "name": "user-view",
            "meta": {
                "breadcrumb": [{
                    "title": "User",
                    "url": "/users"
                }, {
                    "title": "All Users",
                    "url": "/users"
                }, {
                    "title": "View",
                    "active": true
                }],
                "pageTitle": "Users",
                "rule": "editor",
                "authRequired": true
            }
        }, {
            "path": "/profile/view",
            "name": "profile-view",
            "meta": {
                "breadcrumb": [{
                    "title": "Profile Settings",
                    "active": true
                }],
                "pageTitle": "Settings",
                "rule": "editor",
                "authRequired": true
            }
        }, {
            "path": "/users/edit/:userId",
            "name": "user-edit",
            "meta": {
                "breadcrumb": [{
                    "title": "All Users",
                    "url": "/users"
                }, {
                    "title": "All Users",
                    "url": "/users"
                }, {
                    "title": "User Edit",
                    "active": true
                }],
                "pageTitle": "Users",
                "rule": "editor",
                "authRequired": true
            }
        }],
        "customerRoutes": [{
            "path": "/customers",
            "name": "customers",
            "component": {
                "methods": {},
                "components": {
                    "TableView": {
                        "methods": {},
                        "props": ["tableObj"],
                        "staticRenderFns": [],
                        "_compiled": true,
                        "__file": "resources/js/src/views/apps/table/TableView.vue"
                    },
                    "vSelect": {
                        "components": {
                            "Deselect": {
                                "staticRenderFns": [],
                                "_compiled": true
                            },
                            "OpenIndicator": {
                                "staticRenderFns": [],
                                "_compiled": true
                            }
                        },
                        "mixins": [{
                            "props": {
                                "autoscroll": {
                                    "default": true
                                }
                            },
                            "watch": {},
                            "methods": {}
                        }, {
                            "watch": {},
                            "methods": {}
                        }, {
                            "props": {
                                "loading": {
                                    "default": false
                                }
                            },
                            "watch": {},
                            "methods": {}
                        }],
                        "directives": {
                            "appendToBody": {}
                        },
                        "props": {
                            "value": {},
                            "components": {},
                            "options": {},
                            "disabled": {
                                "default": false
                            },
                            "clearable": {
                                "default": true
                            },
                            "searchable": {
                                "default": true
                            },
                            "multiple": {
                                "default": false
                            },
                            "placeholder": {
                                "default": ""
                            },
                            "transition": {
                                "default": "vs__fade"
                            },
                            "clearSearchOnSelect": {
                                "default": true
                            },
                            "closeOnSelect": {
                                "default": true
                            },
                            "label": {
                                "default": "label"
                            },
                            "autocomplete": {
                                "default": "off"
                            },
                            "reduce": {},
                            "selectable": {},
                            "getOptionLabel": {},
                            "getOptionKey": {},
                            "onTab": {},
                            "taggable": {
                                "default": false
                            },
                            "tabindex": {
                                "default": null
                            },
                            "pushTags": {
                                "default": false
                            },
                            "filterable": {
                                "default": true
                            },
                            "filterBy": {},
                            "filter": {},
                            "createOption": {},
                            "resetOnOptionsChange": {
                                "default": false
                            },
                            "clearSearchOnBlur": {},
                            "noDrop": {
                                "default": false
                            },
                            "inputId": {},
                            "dir": {
                                "default": "auto"
                            },
                            "selectOnTab": {
                                "default": false
                            },
                            "selectOnKeyCodes": {},
                            "searchInputQuerySelector": {
                                "default": "[type=search]"
                            },
                            "mapKeydown": {},
                            "appendToBody": {
                                "default": false
                            },
                            "calculatePosition": {}
                        },
                        "watch": {},
                        "methods": {},
                        "computed": {},
                        "staticRenderFns": [],
                        "_compiled": true
                    }
                },
                "staticRenderFns": [],
                "_compiled": true,
                "__file": "resources/js/src/views/apps/customers/CustomersList.vue"
            },
            "title": "People",
            "meta": {
                "breadcrumb": [{
                    "title": "All Customers",
                    "url": "/customers"
                }, {
                    "title": "All Customers",
                    "active": true
                }],
                "pageTitle": "Customers",
                "rule": "admin",
                "authRequired": true
            }
        }, {
            "path": "/customers/view/:id",
            "name": "customers-view",
            "meta": {
                "breadcrumb": [{
                    "title": "All Customers",
                    "url": "/customers"
                }, {
                    "title": "All Customers",
                    "url": "/customers"
                }, {
                    "title": "View",
                    "active": true
                }],
                "pageTitle": "Customers",
                "rule": "admin",
                "authRequired": true
            }
        }, {
            "path": "/customers",
            "name": "customers",
            "meta": {
                "breadcrumb": [{
                    "title": "All Customers",
                    "url": "/customers"
                }, {
                    "title": "All Customers",
                    "active": true
                }],
                "pageTitle": "Customers",
                "rule": "admin",
                "authRequired": true
            }
        }, {
            "path": "/customers/view/:id",
            "name": "customers-view",
            "meta": {
                "breadcrumb": [{
                    "title": "All Customers",
                    "url": "/customers"
                }, {
                    "title": "All Customers",
                    "url": "/customers"
                }, {
                    "title": "View",
                    "active": true
                }],
                "pageTitle": "Customers",
                "rule": "admin",
                "authRequired": true
            }
        }, {
            "path": "/customers/add",
            "name": "customers-add",
            "meta": {
                "breadcrumb": [{
                    "title": "All Customers",
                    "url": "/customers"
                }, {
                    "title": "All Customers",
                    "url": "/customers"
                }, {
                    "title": "Add",
                    "active": true
                }],
                "pageTitle": "Customers",
                "rule": "admin",
                "authRequired": true
            }
        }, {
            "path": "/customers/edit/:id",
            "name": "customers-edit",
            "meta": {
                "breadcrumb": [{
                    "title": "All Customers",
                    "url": "/customers"
                }, {
                    "title": "All Customers",
                    "url": "/customers"
                }, {
                    "title": "Edit",
                    "active": true
                }],
                "pageTitle": "Customers",
                "rule": "admin",
                "authRequired": true
            }
        }]
    }
}

现在我想在一个循环中迭代。那可能吗?

在此之前,我像这样一个一个地迭代循环

for (let route of adminRoutes) {
        baseRoutes[0].children.push(route);
    }

    for (let route of userRoutes) {
        baseRoutes[0].children.push(route);
    }

但当时我正在一个一个地导入文件,对象是这样的。

[{
    "path": "/customers",
    "name": "customers",
    "component": {
        "methods": {},
        "components": {
            "TableView": {
                "methods": {},
                "props": ["tableObj"],
                "staticRenderFns": [],
                "_compiled": true,
                "__file": "resources/js/src/views/apps/table/TableView.vue"
            },
            "vSelect": {
                "components": {
                    "Deselect": {
                        "staticRenderFns": [],
                        "_compiled": true
                    },
                    "OpenIndicator": {
                        "staticRenderFns": [],
                        "_compiled": true
                    }
                },
                "mixins": [{
                    "props": {
                        "autoscroll": {
                            "default": true
                        }
                    },
                    "watch": {},
                    "methods": {}
                }, {
                    "watch": {},
                    "methods": {}
                }, {
                    "props": {
                        "loading": {
                            "default": false
                        }
                    },
                    "watch": {},
                    "methods": {}
                }],
                "directives": {
                    "appendToBody": {}
                },
                "props": {
                    "value": {},
                    "components": {},
                    "options": {},
                    "disabled": {
                        "default": false
                    },
                    "clearable": {
                        "default": true
                    },
                    "searchable": {
                        "default": true
                    },
                    "multiple": {
                        "default": false
                    },
                    "placeholder": {
                        "default": ""
                    },
                    "transition": {
                        "default": "vs__fade"
                    },
                    "clearSearchOnSelect": {
                        "default": true
                    },
                    "closeOnSelect": {
                        "default": true
                    },
                    "label": {
                        "default": "label"
                    },
                    "autocomplete": {
                        "default": "off"
                    },
                    "reduce": {},
                    "selectable": {},
                    "getOptionLabel": {},
                    "getOptionKey": {},
                    "onTab": {},
                    "taggable": {
                        "default": false
                    },
                    "tabindex": {
                        "default": null
                    },
                    "pushTags": {
                        "default": false
                    },
                    "filterable": {
                        "default": true
                    },
                    "filterBy": {},
                    "filter": {},
                    "createOption": {},
                    "resetOnOptionsChange": {
                        "default": false
                    },
                    "clearSearchOnBlur": {},
                    "noDrop": {
                        "default": false
                    },
                    "inputId": {},
                    "dir": {
                        "default": "auto"
                    },
                    "selectOnTab": {
                        "default": false
                    },
                    "selectOnKeyCodes": {},
                    "searchInputQuerySelector": {
                        "default": "[type=search]"
                    },
                    "mapKeydown": {},
                    "appendToBody": {
                        "default": false
                    },
                    "calculatePosition": {}
                },
                "watch": {},
                "methods": {},
                "computed": {},
                "staticRenderFns": [],
                "_compiled": true
            }
        },
        "staticRenderFns": [],
        "_compiled": true,
        "__file": "resources/js/src/views/apps/customers/CustomersList.vue"
    },
    "title": "People",
    "meta": {
        "breadcrumb": [{
            "title": "All Customers",
            "url": "/customers"
        }, {
            "title": "All Customers",
            "active": true
        }],
        "pageTitle": "Customers",
        "rule": "admin",
        "authRequired": true
    }
}, {
    "path": "/customers/view/:id",
    "name": "customers-view",
    "meta": {
        "breadcrumb": [{
            "title": "All Customers",
            "url": "/customers"
        }, {
            "title": "All Customers",
            "url": "/customers"
        }, {
            "title": "View",
            "active": true
        }],
        "pageTitle": "Customers",
        "rule": "admin",
        "authRequired": true
    }
}, {
    "path": "/customers",
    "name": "customers",
    "meta": {
        "breadcrumb": [{
            "title": "All Customers",
            "url": "/customers"
        }, {
            "title": "All Customers",
            "active": true
        }],
        "pageTitle": "Customers",
        "rule": "admin",
        "authRequired": true
    }
}, {
    "path": "/customers/view/:id",
    "name": "customers-view",
    "meta": {
        "breadcrumb": [{
            "title": "All Customers",
            "url": "/customers"
        }, {
            "title": "All Customers",
            "url": "/customers"
        }, {
            "title": "View",
            "active": true
        }],
        "pageTitle": "Customers",
        "rule": "admin",
        "authRequired": true
    }
}, {
    "path": "/customers/add",
    "name": "customers-add",
    "meta": {
        "breadcrumb": [{
            "title": "All Customers",
            "url": "/customers"
        }, {
            "title": "All Customers",
            "url": "/customers"
        }, {
            "title": "Add",
            "active": true
        }],
        "pageTitle": "Customers",
        "rule": "admin",
        "authRequired": true
    }
}, {
    "path": "/customers/edit/:id",
    "name": "customers-edit",
    "meta": {
        "breadcrumb": [{
            "title": "All Customers",
            "url": "/customers"
        }, {
            "title": "All Customers",
            "url": "/customers"
        }, {
            "title": "Edit",
            "active": true
        }],
        "pageTitle": "Customers",
        "rule": "admin",
        "authRequired": true
    }
}]

我想在一个循环中迭代 adminRoutes

标签: javascriptvue.jsvuejs2vue-componentvue-router

解决方案


您可以将对象合并为一个对象,然后对其进行迭代,如下所示:

for (let route of [].concat(contactRoutes, userRoutes, customerRoutes)) {
    baseRoutes[0].children.push(route);
}

这样,您就可以一次对所有对象进行交互。

要动态使用导出的对象而不指定每个对象,您可以执行以下操作:

const allRoutes = [].concat(...Object.values(adminRoutes));
for (let route of allRoutes) {
    baseRoutes[0].children.push(route);
}

推荐阅读