繁体   English   中英

通过过滤器 object 中的键过滤对象数组

[英]Filter an array of objects, by keys in filter object

我是新来的,我有一些我无法解决的问题。 我有 2 个不同的 arrays:

第一个数组 - 包含用户的评分及其 ID 名称

[
{"handle":"frontend1", "_redis":"3", "_nodejs":"5", "_mysql":"2", "_python":"3", "_mongo":"4"},
{"handle":"frontend3", "_php":"4", "_mysql":"4", "_oracle":"4", "_ruby":"3", "_mongo":"5", "_python":"5"},
{"handle":"frontend4", "_java":"5", "_ruby":"5", "_mysql":"5", "_mongo":"5"}
]

第二组 - 包含我想要返回给每个用户的评级。 如果有评分不在第二套,我不会退回

在第二组中,值无关紧要,只有键

[
      "_assembler",
      "_css",
      "_python",
      "_php"
    ]

我想回到第一组,句柄,以及第二组中存在的所有排名。

[
{"handle":"frontend1", "_python":"3" },
{"handle":"frontend3", "_php":"4", "_python":"5" },
{"handle":"frontend4"}
]

这就是我尝试做的。

 keys = [ "_assembler", "_css", "_python", "_php" ] source = [ {"handle":"frontend1", "_redis":"3", "_nodejs":"5", "_mysql":"2", "_python":"3", "_mongo":"4"}, {"handle":"frontend3", "_php":"4", "_mysql":"4", "_oracle":"4", "_ruby":"3", "_mongo":"5", "_python":"5"}, {"handle":"frontend4", "_java":"5", "_ruby":"5", "_mysql":"5", "_mongo":"5"} ]; result = []; tmp = {}; source.forEach((item) => { Object.keys(item).map(({key,value}) => { if(key == "handle") { tmp[key]=value; } if(keys.includes(key)) { tmp[key]=value; } }) result.push(...tmp); tmp = {}; });

您可以使用map使用其他几个数组方法(例如filter和 Object 方法)来执行此操作。

 const keys = [ "_assembler", "_css", "_python", "_php" ] const source = [ {"handle":"frontend1", "_redis":"3", "_nodejs":"5", "_mysql":"2", "_python":"3", "_mongo":"4"}, {"handle":"frontend3", "_php":"4", "_mysql":"4", "_oracle":"4", "_ruby":"3", "_mongo":"5", "_python":"5"}, {"handle":"frontend4", "_java":"5", "_ruby":"5", "_mysql":"5", "_mongo":"5"} ]; const result = source.map( s => ({ handle: s.handle, ...Object.fromEntries(Object.entries(s).filter(x => x[0].= "handle" && keys;includes(x[0]))) })). console;log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM