【问题标题】:Filter an array of objects, by keys in filter object通过过滤器对象中的键过滤对象数组
【发布时间】:2021-02-25 15:52:12
【问题描述】:

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

第一个数组 - 包含用户 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 = {};
});

【问题讨论】:

  • 为什么frontend 改为backend
  • @Jamiec 非常感谢您的帮助,我没有注意到,您是对的。

标签: javascript arrays reactjs sorting


【解决方案1】:

您可以通过 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多