ES6对象详情获取及React中双JSON数据整合存变量问题
嘿,我来帮你搞定这两个ES6/React相关的问题,都是日常开发里经常碰到的场景~
问题1:ES6中基于另一个对象详情从目标对象获取对应信息
这个需求得看目标对象的结构,分两种常见情况处理:
如果目标是键值对结构的对象(比如配置表、字典):直接用对象属性访问或者解构就能快速拿到对应值,效率最高
// 示例:根据用户的role字段,获取对应的权限配置 const user = { id: 1, role: 'admin' }; const rolePermissions = { admin: { canEdit: true, canDelete: true }, editor: { canEdit: true, canDelete: false }, viewer: { canEdit: false, canDelete: false } }; // 方式1:直接属性访问 const userPermissions = rolePermissions[user.role]; // 方式2:解构赋值(更优雅) const { [user.role]: permissions } = rolePermissions;如果目标是数组结构的对象列表:用
Array.find()方法,匹配源对象的标识字段(比如ID、状态值)来获取对应详情// 示例:根据订单的status字段,获取对应的状态说明 const currentOrder = { orderId: 'OD123', status: 'shipped' }; const statusDetails = [ { status: 'pending', label: '待处理', desc: '订单已提交,等待审核' }, { status: 'shipped', label: '已发货', desc: '商品已发出,正在配送中' }, { status: 'completed', label: '已完成', desc: '用户已确认收货' } ]; const orderStatusDetail = statusDetails.find(detail => detail.status === currentOrder.status);
问题2:关联两个JSON数据并存入单个变量
当然可以!而且我可以帮你优化一下你原来的写法——原来map嵌套find的方式是O(n*m)的时间复杂度,当数据量大的时候会变慢。我们可以先把questions转成以questionID为键的映射对象,后续查找问题只需要O(1)的时间,整体效率提升很多。
优化后的代码示例(React ES6风格):
// 第一步:把questions数组转成映射对象,key为questionID,value为对应的question对象 const questionMap = questions.reduce((acc, question) => { acc[question.questionID] = question; return acc; }, {}); // 第二步:遍历answers,关联对应的question,整合需要的字段到单个results变量中 const results = answers.map(answer => { // 通过questionID快速找到匹配的问题(加个|| {}避免无匹配时报错) const matchedQuestion = questionMap[answer.questionID] || {}; // 整合你需要的所有字段:问题信息、answerValues、values.id return { // 可以按需选择问题的字段,比如只取questionText:questionText: matchedQuestion.questionText ...matchedQuestion, // 或者直接展开所有问题字段 answerValues: answer.answerValues, valueId: answer.values.id // 假设answer.values是包含id的对象 }; });
这样results就是你需要的汇总数据,每个元素都包含了关联的问题详情、answerValues和values.id,完全符合需求,而且性能更优。
内容的提问来源于stack exchange,提问作者Mo.
相关产品推荐
相关产品推荐

