首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按Filter object中的键过滤对象数组

按Filter object中的键过滤对象数组
EN

Stack Overflow用户
提问于 2021-02-25 23:52:13
回答 1查看 44关注 0票数 0

我是新来的,我有不能解决的问题。我有两个不同的数组:

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

代码语言:javascript
运行
复制
[
{"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"}
]

第二个集合-包含我想要返回给每个用户的评分。如果有一个评分不在第二组中,我不会退还它。

在第二个集合中,值并不重要,只有键

代码语言:javascript
运行
复制
[
      "_assembler",
      "_css",
      "_python",
      "_php"
    ]

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

代码语言:javascript
运行
复制
[
{"handle":"frontend1", "_python":"3" },
{"handle":"frontend3", "_php":"4", "_python":"5" },
{"handle":"frontend4"}
]

这就是我想要做的。

代码语言:javascript
运行
复制
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 = {};
});

EN

回答 1

Stack Overflow用户

发布于 2021-02-26 00:58:05

您可以通过利用其他一些数组方法(如filter )和对象方法的map来实现这一点。

代码语言:javascript
运行
复制
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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66371865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档