我又来请教一个方法了。 掩面哭泣 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI生成的内容
pianjiao
V2EX    程序员

我又来请教一个方法了。 掩面哭泣

  •  
  •   pianjiao 2022-03-25 11:04:53 +08:00 6095 次点击
    这是一个创建于 1298 天前的主题,其中的信息可能已经有所发展或是发生改变。
     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 条附言    2022-03-28 15:39:11 +08:00
    问个问题,还能让某些人,教育成这样。。

    溜了溜了。

    谢谢解答的各位。已感谢

    溜了

    溜了
    第 2 条附言    2022-03-28 15:44:59 +08:00
    还有这个帖子发了有好几天,

    应该是上周五发的,

    然后自己 参考之前一个也是格式转换的帖子,里面老哥的回复。

    自己写出了。自己的想要的转换格式方法。

    然后周末就没有上 v 站

    刚刚上来看看,因为没有登录。 看到自己的帖子这么多人回复。

    就登录上来回复一下大家。

    感谢帮助的各位老哥。

    也谢谢给出意见的几位。

    另外,我选择在 v 站发帖请教,肯定是自己解决不了,搜索也没有搜到解决方案,才发出来的。

    至于那么觉得问的问题 使 v 站 低龄化的话,麻烦里 block 我,眼不见心不烦。 谢谢
    43 条回复    2022-03-28 15:41:21 +08:00
    zcf0508
        1
    zcf0508  
       2022-03-25 11:15:42 +08:00 via Android
    让后端按要求返回数据
    pianjiao
        2
    pianjiao  
    OP
       2022-03-25 11:27:01 +08:00
    pengtdyd
        3
    pengtdyd  
       2022-03-25 11:32:49 +08:00   22
    别搞 IT 了吧,找个厂打螺丝吧
    Curtion
        4
    Curtion  
       2022-03-25 12:02:41 +08:00   1
    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'))
    flowerpiggy
        5
    flowerpiggy  
       2022-03-25 12:06:31 +08:00
    用 proxy 最方便。
    itechify
        6
    itechify  
    PRO
       2022-03-25 12:16:15 +08:00 via Android   2
    絮我直言,为什么一个 map/dict 的变量是 list
    AV1
        7
    AV1  
       2022-03-25 12:19:19 +08:00 via Android
    @pengtdyd 看以往发帖记录,应该木材厂
    BingoXuan
        8
    BingoXuan  
       2022-03-25 12:25:35 +08:00   1
    假设你用的是 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')
    }
    }
    superfatboy
        9
    superfatboy  
       2022-03-25 13:13:22 +08:00
    找个场,剪视频吧
    yousabuk
        10
    yousabuk  
       2022-03-25 13:43:47 +08:00 via iPhone
    哈哈哈哈你的工资是由 V 友支撑起来的吗?
    VagabondH
        11
    VagabondH  
       2022-0-25 16:25:08 +08:00   1
    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;
    };
    KJR5OR04CnCiWf02
        12
    KJR5OR04CnCiWf02  
       2022-03-25 16:34:13 +08:00
    木材厂是哪个?
    heyOhayo
        13
    heyOhayo  
       2022-03-25 17:24:35 +08:00
    找个厂上班吧。。。
    lee1997
        14
    lee1997  
       2022-03-25 19:29:59 +08:00   6
    v2 的回复也变得低龄化了吗?
    别人学习的问题,好好回复不就行了,不懂可以不回,嘲笑别人可以满足你的优越感?
    《请尽量让自己的回复能够对别人有帮助》
    zackwu
        15
    zackwu  
       2022-03-25 20:31:27 +08:00   2
    lee1997
        16
    lee1997  
       2022-03-25 21:15:40 +08:00 via Android
    @keith1126 你要求每一个人提问前先掌握这些东西? op 已经 show code ,问题也很简单,难道还不够是吗,你的意思是问题没提好应该进厂吗
    paradoxs
        17
    paradoxs  
       2022-03-25 21:26:59 +08:00
    说实在的,让后端重新给你处理一下,比你在这里琢磨更。

    后端返回这种格式的数据是很简单的。
    zackwu
        18
    zackwu  
       2022-03-25 21:41:01 +08:00
    @lee1997 #16

    我什么也没说啊……你是不是认错了,我只是贴出一个《提问的智慧》,你觉得楼主做得符合这个指南,那就没事呗
    learningman
        19
    learningman  
       2022-03-25 21:58:59 +08:00 via Android
    @lee1997 楼主这不像是问问题,这都是最基本的操作,不好说有什么问的必要。
    像是什么呢?代为完成个人任务。
    这可不受欢迎。
    lee1997
        20
    lee1997  
       2022-03-26 08:57:05 +08:00 via Android
    @keith1126 你回复我,让我以为 op 没有做到「提问的智慧」,所以就可以被嘲笑进厂呢
    lee1997
        21
    lee1997  
       2022-03-26 08:57:55 +08:00 via Android
    @learningman 呵呵,这也不至于嘲笑进厂这种地步吧
    seakingii
        22
    seakingii  
       2022-03-26 09:41:41 +08:00
    首先这问题也太简单了,就是一个 js 对象里面的元素查看的问题。以后如果大家都把最简单的问题拿来问,比如 hello,world 级的问题拿来问,这不是好事。我认为但凡把书好好看看,把学习视频学习下,不至于这么问。

    其次上面的那个 “v2 的回复也变得低龄化了吗?
    别人学习的问题,好好回复不就行了,不懂可以不回,嘲笑别人可以满足你的优越感?
    《请尽量让自己的回复能够对别人有帮助》” 的指责,没看出他的“回复”对楼主有帮助,也没看出他的“回复”对非楼主有帮助 ,所以,这是一个“自己做不到的人指责别人做不到”?
    placeholder
        23
    placeholder  
       2022-03-26 09:49:38 +08:00   1
    @lee1997 你的回复...对他有什么帮助???

    ???
    ericgui
        24
    ericgui  
       2022-03-26 10:22:10 +08:00
    虽然这个题确实傻

    但 v 站一直以来又嘲笑新人的“传统”,这很不好


    我当年也问过很多傻问题,这一路走来,也确实不易

    谁都不是娘胎出来就带着一个 CS 学位的,还请某些人手下留情,积点口德比较好
    /div>
    seakingii
        25
    seakingii  
       2022-03-26 11:09:22 +08:00   2
    @ericgui 嘲笑是不对,
    但随便问问题就是对的?
    你也知道这问题“傻”,
    楼主自己也知道这问题“傻”,(看楼主的标题)
    为什么还要问这样的问题?
    浪费大家时间?


    像楼主这样的明知道不是正确的做法还来做的,为什么不能嘲笑?真的想好好解决问题,要么好好自学,要么花点成本现实在用”钞能力“来解决(找个老师或者培训班或者专人指导),现在搁这是打算自己不努力来白嫖?
    golangLover
        26
    golangLover  
       2022-03-26 13:09:14 +08:00 via Android
    笑了。这么多人说楼主傻的,结果只有八楼能给一个合适的答案,其他的写法都很累赘
    fortunezhang
        27
    fortunezhang  
       2022-03-26 14:03:38 +08:00
    首先我感觉这个应该由后端来处理。
    其次如果你处理的话,这能 each 遍历或者 filter 过滤。 没有什么好办法。
    最好还是由后端来处理。
    a852695
        28
    a852695  
       2022-03-26 14:26:04 +08:00
    问题感觉没有描述很清楚,传入 a big 是啥意思呢,可以更详细一点描述,方便解决问题
    a852695
        29
    a852695  
       2022-03-26 15:00:47 +08:00
    发表一些感触,看到楼主问题也想到曾经自己也啥都不懂,学电子专业出身,代码也是照着书一点点学,一点点验,知道一开始的不容易。现在工作了几年后看到 V2 上还是氛围那么好,程序员是一个很单纯的群体,没有弯弯绕绕,大部分争执也在于论技术,挺温暖的一个群体
    kingfalse
        30
    kingfalse  
       2022-03-26 15:48:30 +08:00 via Android
    活捉嘤嘤怪
    lee1997
        31
    lee1997  
       2022-03-26 19:44:57 +08:00 via Android
    @placeholder 我的帮助体现在改善环境,别动不动就开始嘲笑。那你的回复对我有什么帮助呢?
    lee1997
        32
    lee1997  
       2022-03-26 19:49:20 +08:00 via Android
    最后说一句,楼主这个帖子对我挺有帮助的,让我 b 了这些人。避免我以后发帖得到的回复都是嘲笑劝退的消极评论
    placeholder
        33
    placeholder  
       2022-03-26 23:32:22 +08:00   3
    @lee1997 ???

    你除了放了个地图炮你改善什么了?

    ???突然疑惑

    你想改善环境难道不应该从自己认真回答贴主所询问的问题开始吗?

    ???
    seakingii
        34
    seakingii  
       2022-03-27 01:05:16 +08:00   1
    @placeholder

    网上很多这样的网民,自己站在道德高点,抨击别人,满足自己的”道德欲望“。。。

    如果真的让他像雷锋一样无私奉献,他会干么?
    siteshen
        35
    siteshen  
       2022-03-27 14:46:28 +08:00   1
    #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: [],
    // },
    //
    460881773
        36
    460881773  
       2022-03-28 09:15:52 +08:00
    卷起来了。
    Unicorns96
        37
    Unicorns96  
       2022-03-28 10:25:45 +08:00   1
    /**
    * 菜鸡后端试着写一下
    * */
    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;
    }
    Unicorns96
        38
    Unicorns96  
       2022-03-28 10:57:30 +08:00
    不要听楼上一些人的,作为一个成熟的前端,应该学会自己处理一些简单的数据了,别啥都交给后端
    dany813
        39
    dany813  
       2022-03-28 13:08:21 +08:00   1
    建议 楼主多学习下 lodash ,做数据处理很有用
    Zink99
        40
    Zink99  
       2022-03-28 13:23:46 +08:00   1


    只测试了你给的数据,没问题,看不懂的话问我。
    Zink99
        41
    Zink99  
       2022-03-28 13:42:01 +08:00
    说一个看法,类似帖子见过很多次了,回复确实也是一大堆批评的,我很疑惑程序员的开源精神呢?哪怕你觉得这个问题很简单你看不上,你关掉就好了,没必要嘲讽吧?

    之前在 discord python server 上见过几个程序员教小白用 git ,教他配开发环境,个人觉得真的很棒。
    xiamy1314
        42
    xiamy1314  
       2022-03-28 14:02:50 +08:00
    众筹工资。
    pianjiao
        43
    pianjiao  
    OP
       2022-03-28 15:41:21 +08:00
    @siteshen 感谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1045 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 18:29 PVG 02:29 LAX 11:29 JFK 14:29
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86