const list = { email: { a: { big: { rule: ['abig'], isShow: true, extends: [] }, small: { rule: ['asmall'], isShow: false, extends: [] } }, b: { big: { rule: ['bbig'], isShow: true, extends: [] }, small: { rule: ['bsmall'], isShow: false, extends: [] } }, }, qq: { a: { big: { rule: ['abigqq'], isShow: true, extends: [] }, small: { rule: ['asmallqq'], isShow: false, extends: [] } }, b: { big: { rule: ['bbigqq'], isShow: true, extends: [] }, small: { rule: ['bsmallqq'], isShow: false, extends: [] } }, }, }
比如说 我传入了 a big 那么就取 qq 和 email 下 a => big 里面的转化成下面格式的 对象
const data = { rule: { email: ['abigemail'], qq: ['abigqq'] }, ishow: { email: true, qq: false }, extends: { email: [], qq: [] } }
![]() | 1 zcf0508 2022-03-25 11:15:42 +08:00 via Android 让后端按要求返回数据 |
![]() | 3 pengtdyd 2022-03-25 11:32:49 +08:00 ![]() 别搞 IT 了吧,找个厂打螺丝吧 |
![]() | 4 Curtion 2022-03-25 12:02:41 +08:00 ![]() function getCustomData(a, b) { let data = {} for (let item in list) { for (let key in list[item][a][b]) { data[key] = { ...data[key], [item]: list[item][a][b][key] } } } return data } console.log(getCustomData('a', 'big')) |
![]() | 5 flowerpiggy 2022-03-25 12:06:31 +08:00 用 proxy 最方便。 |
![]() | 6 itechify PRO ![]() 絮我直言,为什么一个 map/dict 的变量是 list |
![]() | 8 BingoXuan 2022-03-25 12:25:35 +08:00 ![]() 假设你用的是 js ,导入 lodash 后 { rule: { email: _.get(list,'email.a.big.rule'), qq: _.get(list,'qq.a.big.rule') }, isShow: { email: _.get(list,'email.a.big.isShow'), qq: _.get(list,'qq.a.big.isShow') }, extends: { email: _.get(list,'email.a.big.extends'), qq: _.get(list,'qq.a.big.extends') } } |
![]() | 9 superfatboy 2022-03-25 13:13:22 +08:00 找个场,剪视频吧 |
![]() | 10 yousabuk 2022-03-25 13:43:47 +08:00 via iPhone 哈哈哈哈你的工资是由 V 友支撑起来的吗? |
11 VagabondH 2022-0-25 16:25:08 +08:00 ![]() const cOnvert= (data) => { const result = {}; const keysLevel1 = Object.keys(data); keysLevel1.forEach(k1 => { console.log(k1, 'k1'); const keysLevel2 = Object.keys(data[k1]); keysLevel2.forEach(k2 => { console.log(k2, 'k2'); const keysLevel3 = Object.keys(data[k1][k2]); if (!result[k2]) result[k2] = {}; keysLevel3.forEach(k3 => { console.log(k3, 'k3'); const keysLevel4 = Object.keys(data[k1][k2][k3]); if (!result[k2][k3]) result[k2][k3] = {}; keysLevel4.forEach(k4 => { if (!result[k2][k3][k4]) result[k2][k3][k4] = {}; result[k2][k3][k4][k1] = data[k1][k2][k3][k4]; }) }) }) }); return result; }; |
12 KJR5OR04CnCiWf02 2022-03-25 16:34:13 +08:00 木材厂是哪个? |
![]() | 13 heyOhayo 2022-03-25 17:24:35 +08:00 找个厂上班吧。。。 |
![]() | 14 lee1997 2022-03-25 19:29:59 +08:00 ![]() v2 的回复也变得低龄化了吗? 别人学习的问题,好好回复不就行了,不懂可以不回,嘲笑别人可以满足你的优越感? 《请尽量让自己的回复能够对别人有帮助》 |
15 zackwu 2022-03-25 20:31:27 +08:00 ![]() |
![]() | 16 lee1997 2022-03-25 21:15:40 +08:00 via Android @keith1126 你要求每一个人提问前先掌握这些东西? op 已经 show code ,问题也很简单,难道还不够是吗,你的意思是问题没提好应该进厂吗 |
![]() | 17 paradoxs 2022-03-25 21:26:59 +08:00 说实在的,让后端重新给你处理一下,比你在这里琢磨更。 后端返回这种格式的数据是很简单的。 |
18 zackwu 2022-03-25 21:41:01 +08:00 |
![]() | 19 learningman 2022-03-25 21:58:59 +08:00 via Android |
![]() | 21 lee1997 2022-03-26 08:57:55 +08:00 via Android @learningman 呵呵,这也不至于嘲笑进厂这种地步吧 |
22 seakingii 2022-03-26 09:41:41 +08:00 首先这问题也太简单了,就是一个 js 对象里面的元素查看的问题。以后如果大家都把最简单的问题拿来问,比如 hello,world 级的问题拿来问,这不是好事。我认为但凡把书好好看看,把学习视频学习下,不至于这么问。 其次上面的那个 “v2 的回复也变得低龄化了吗? 别人学习的问题,好好回复不就行了,不懂可以不回,嘲笑别人可以满足你的优越感? 《请尽量让自己的回复能够对别人有帮助》” 的指责,没看出他的“回复”对楼主有帮助,也没看出他的“回复”对非楼主有帮助 ,所以,这是一个“自己做不到的人指责别人做不到”? |
![]() | 23 placeholder 2022-03-26 09:49:38 +08:00 ![]() |
![]() | 24 ericgui 2022-03-26 10:22:10 +08:00 虽然这个题确实傻 但 v 站一直以来又嘲笑新人的“传统”,这很不好 我当年也问过很多傻问题,这一路走来,也确实不易 谁都不是娘胎出来就带着一个 CS 学位的,还请某些人手下留情,积点口德比较好 |
25 seakingii 2022-03-26 11:09:22 +08:00 ![]() @ericgui 嘲笑是不对, 但随便问问题就是对的? 你也知道这问题“傻”, 楼主自己也知道这问题“傻”,(看楼主的标题) 为什么还要问这样的问题? 浪费大家时间? 像楼主这样的明知道不是正确的做法还来做的,为什么不能嘲笑?真的想好好解决问题,要么好好自学,要么花点成本现实在用”钞能力“来解决(找个老师或者培训班或者专人指导),现在搁这是打算自己不努力来白嫖? |
26 golangLover 2022-03-26 13:09:14 +08:00 via Android 笑了。这么多人说楼主傻的,结果只有八楼能给一个合适的答案,其他的写法都很累赘 |
![]() | 27 fortunezhang 2022-03-26 14:03:38 +08:00 首先我感觉这个应该由后端来处理。 其次如果你处理的话,这能 each 遍历或者 filter 过滤。 没有什么好办法。 最好还是由后端来处理。 |
28 a852695 2022-03-26 14:26:04 +08:00 问题感觉没有描述很清楚,传入 a big 是啥意思呢,可以更详细一点描述,方便解决问题 |
29 a852695 2022-03-26 15:00:47 +08:00 发表一些感触,看到楼主问题也想到曾经自己也啥都不懂,学电子专业出身,代码也是照着书一点点学,一点点验,知道一开始的不容易。现在工作了几年后看到 V2 上还是氛围那么好,程序员是一个很单纯的群体,没有弯弯绕绕,大部分争执也在于论技术,挺温暖的一个群体 |
![]() | 30 kingfalse 2022-03-26 15:48:30 +08:00 via Android 活捉嘤嘤怪 |
![]() | 31 lee1997 2022-03-26 19:44:57 +08:00 via Android @placeholder 我的帮助体现在改善环境,别动不动就开始嘲笑。那你的回复对我有什么帮助呢? |
![]() | 32 lee1997 2022-03-26 19:49:20 +08:00 via Android 最后说一句,楼主这个帖子对我挺有帮助的,让我 b 了这些人。避免我以后发帖得到的回复都是嘲笑劝退的消极评论 |
![]() | 33 placeholder 2022-03-26 23:32:22 +08:00 ![]() |
34 seakingii 2022-03-27 01:05:16 +08:00 ![]() |
35 siteshen 2022-03-27 14:46:28 +08:00 ![]() #2 @pianjiao 有点儿复杂,不过还是写出来了。 var getAttr = function (obj, paths) { let value = obj; for (let i = 0; i < paths.length; i++) { value = value[paths[i]]; } return value; }; var rebuild = function (dict, paths) { // key: email, qq const pairs = Object.keys(dict).map((key) => { const obj = getAttr(dict[key], paths); return [key, obj]; }); console.log("----", pairs); return pairs.reduce((merged, prev) => { // prev: ['email', {'rule', 'isShow', extends}] // merged: ['rule', {'email', 'qq'}] console.log("--- prev", prev); Object.entries(prev[1]).forEach(([k, v]) => { merged[k] = merged[k] || {}; merged[k][prev[0]] = v; }); return merged; }, {}); }; // TESTING: getAttr(list, ["email", "a", "big", "isShow"]); // true rebuild(list, ["a", "big"]); // { // rule: { // email: ["abig"], // qq: ["abigqq"], // }, // isShow: { // email: true, // qq: true, // }, // extends: { // email: [], // qq: [], // }, // |
![]() | 36 460881773 2022-03-28 09:15:52 +08:00 卷起来了。 |
37 Unicorns96 2022-03-28 10:25:45 +08:00 ![]() /** * 菜鸡后端试着写一下 * */ function test(list, field1, field2) { let result = {}; Object.keys(list).forEach(key => { let current = list[key][field1][field2]; Objectkeys(current).forEach(innerKey => { if (!result[innerKey]) { result[innerKey] = {}; } result[innerKey][key] = current[innerKey]; }) }) return result; } |
38 Unicorns96 2022-03-28 10:57:30 +08:00 不要听楼上一些人的,作为一个成熟的前端,应该学会自己处理一些简单的数据了,别啥都交给后端 |
![]() | 39 dany813 2022-03-28 13:08:21 +08:00 ![]() 建议 楼主多学习下 lodash ,做数据处理很有用 |
![]() | 40 Zink99 2022-03-28 13:23:46 +08:00 ![]() |
![]() | 41 Zink99 2022-03-28 13:42:01 +08:00 说一个看法,类似帖子见过很多次了,回复确实也是一大堆批评的,我很疑惑程序员的开源精神呢?哪怕你觉得这个问题很简单你看不上,你关掉就好了,没必要嘲讽吧? 之前在 discord python server 上见过几个程序员教小白用 git ,教他配开发环境,个人觉得真的很棒。 |
![]() | 42 xiamy1314 2022-03-28 14:02:50 +08:00 众筹工资。 |