• 请不要在回答技术问题时复制粘贴 AI 生成的内容
pianjiao
V2EX  ›  程序员

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

  •  
  •   pianjiao · Mar 25, 2022 · 7017 views
    This topic created in 1685 days ago, the information mentioned may be changed or developed.
        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: []
            }
        }
    
    Supplement 1  ·  Mar 28, 2022
    问个问题,还能让某些人,教育成这样。。

    溜了溜了。

    谢谢解答的各位。已感谢

    溜了

    溜了
    Supplement 2  ·  Mar 28, 2022
    还有这个帖子发了有好几天,

    应该是上周五发的,

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

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

    然后周末就没有上 v 站

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

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

    感谢帮助的各位老哥。

    也谢谢给出意见的几位。

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

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

    后端返回这种格式的数据是很简单的。
    zackwu
    zackwu
    Mar 25, 2022
    18
    @lee1997 #16

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

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

    ???
    ericgui
    ericgui
    Mar 26, 2022
    24
    虽然这个题确实傻

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


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

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


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

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

    ???突然疑惑

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

    ???
    seakingii
    seakingii
    Mar 27, 2022❤️1
    34
    @placeholder

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

    如果真的让他像雷锋一样无私奉献,他会干么?
    siteshen
    siteshen
    Mar 27, 2022❤️1
    35
    #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
    460881773
    Mar 28, 2022
    36
    卷起来了。
    Unicorns96
    Unicorns96
    Mar 28, 2022❤️1
    37
    /**
    * 菜鸡后端试着写一下
    * */
    function test(list, field1, field2) {
    let result = {};
    Object.keys(list).forEach(key => {
    let current = list[key][field1][field2];
    Object.keys(current).forEach(innerKey => {
    if (!result[innerKey]) {
    result[innerKey] = {};
    }
    result[innerKey][key] = current[innerKey];
    })
    })
    return result;
    }
    Unicorns96
    Unicorns96
    Mar 28, 2022
    38
    不要听楼上一些人的,作为一个成熟的前端,应该学会自己处理一些简单的数据了,别啥都交给后端
    dany813
    dany813
    Mar 28, 2022❤️1
    39
    建议 楼主多学习下 lodash ,做数据处理很有用
    Zink99
    Zink99
    Mar 28, 2022❤️1
    40


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

    之前在 discord python server 上见过几个程序员教小白用 git ,教他配开发环境,个人觉得真的很棒。
    xiamy1314
    xiamy1314
    Mar 28, 2022
    42
    众筹工资。
    pianjiao
    pianjiao
    OP
    Mar 28, 2022
    43
    @siteshen 感谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3810 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 05:31 · PVG 13:31 · LAX 21:31 · JFK 00:31
    ♥ Do have faith in what you're doing.