javascript - 如何用函数包装子属性?
问题描述
我想用如下函数包装对象的每个子对象。
是否有任何解决方案可以制作一个功能或其他东西而不是手动执行此操作?
// current code
import authController from "./authController";
import appController from "./appController";
import userController from "./userController";
import postController from "./postController";
import { executeRequest } from "./utils";
const controllers = {
user: { save: executeRequest(userController.save),
confirm: executeRequest(userController.confirm) },
post: {
save: executeRequest(postController.save),
},
auth: {
signin: executeRequest(authController.signin),
signout: executeRequest(authController.signout),
},
app: {
get: executeRequest(appController.get)
}
我想使用这样的对象
// expectation
import authController from "./authController";
import appController from "./appController";
import userController from "./userController";
import postController from "./postController";
import { executeRequest } from "./utils";
// do something here to wrap the children
const controllers = {
user: userController,
auth: authController,
post: postController,
app: appController
};
import controllers from "../controllers";
const postController = controllers.post;
router.post(Routes.DEFAULT, postController.save);
谢谢!
解决方案
您可以枚举所有导入中的所有属性并通过executeRequest
函数发送它们。
let controllers = {
user: userController,
auth: authController,
post: postController,
app: appController
};
controllers = Object.keys(controllers).reduce((cAcc, cCurr) => {
cAcc[cCurr] = Object.keys(controllers[cCurr]).reduce((mAcc, mCurr) => {
mAcc[mCurr] = executeRequest(controllers[cCurr][mCurr]);
return mAcc;
}, {})
return cAcc;
}, {})
此时,您的对象将拥有通过该函数controllers
发送的所有控制器及其方法。executeRequest
推荐阅读
- jquery - 不同的 typeerror 和 Chrome 和 IE 11
- swift - 在视图中重新实例化 @EnvironmentObject
- laravel - 如何使用 Laravel 和 Vue js 搜索数据?
- javascript - 逻辑:使用传送门时防止无限循环
- javascript - 根据Flask中html中的if条件触发JQuery中的不同事件
- python - 随机产生获胜者
- react-native - ReferenceError:找不到变量:道具
- arrays - 过滤虚数
- java - ConcurrentModification EHCache 多线程 Java
- tableau-api - 如何通过在 Tableau 中单击并过滤来自另一个源的条形图来过滤一个源?