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

2022-03-25 11:04:53 +08:00
 pianjiao
    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: []
        }
    }
5457 次点击
所在节点    程序员
43 条回复
lee1997
2022-03-26 08:57:55 +08:00
@learningman 呵呵,这也不至于嘲笑进厂这种地步吧
seakingii
2022-03-26 09:41:41 +08:00
首先这问题也太简单了,就是一个 js 对象里面的元素查看的问题。以后如果大家都把最简单的问题拿来问,比如 hello,world 级的问题拿来问,这不是好事。我认为但凡把书好好看看,把学习视频学习下,不至于这么问。

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

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

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


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

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


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

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

???突然疑惑

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

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

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

如果真的让他像雷锋一样无私奉献,他会干么?
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: [],
// },
//
460881773
2022-03-28 09:15:52 +08:00
卷起来了。
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];
Object.keys(current).forEach(innerKey => {
if (!result[innerKey]) {
result[innerKey] = {};
}
result[innerKey][key] = current[innerKey];
})
})
return result;
}
Unicorns96
2022-03-28 10:57:30 +08:00
不要听楼上一些人的,作为一个成熟的前端,应该学会自己处理一些简单的数据了,别啥都交给后端
dany813
2022-03-28 13:08:21 +08:00
建议 楼主多学习下 lodash ,做数据处理很有用
Zink99
2022-03-28 13:23:46 +08:00


只测试了你给的数据,没问题,看不懂的话问我。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842804

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX