javascript - 如何使用字符串数组来过滤对象数组?

标签 javascript arrays object

给定一个对象数组:

people = [
    {id: "1", name: "abc", gender: "m", age:"15", country:"USA" },
    {id: "2", name: "def", gender: "m", age:"25", country:"BRA" },
    {id: "3", name: "ghi", gender: "f", age:"05", country:"CHI" },
    {id: "4", name: "jkl", gender: "m", age:"35", country:"RUS" },
    {id: "5", name: "mno", gender: "m", age:"41", country:"JAP" },
    {id: "6", name: "pqr", gender: "f", age:"30", country:"COL" },
    {id: "7", name: "stu", gender: "f", age:"31", country:"CAN" },
    {id: "8", name: "vwx", gender: "m", age:"78", country:"USA" },
]

以及一组想要的键:

wantedKeys = ["name", "age", "country"]

预期输出:

peopleFiltered = [
    {name: "abc", age:"15", country:"USA" },
    {name: "def", age:"25", country:"BRA" },
    {name: "ghi", age:"05", country:"CHI" },
    {name: "jkl", age:"35", country:"RUS" },
    {name: "mno", age:"41", country:"JAP" },
    {name: "pqr", age:"30", country:"COL" },
    {name: "stu", age:"31", country:"CAN" },
    {name: "vwx", age:"78", country:"USA" },
]

如何过滤people array 返回一个新的对象数组,仅包含 wantedKeys 中包含的项目数组?

最佳答案

解决方案

使用reduce可能还有更短的方法,但这应该是一个有效的起点。

var peopleFiltered = people.map(person => {
  var obj = {};
  wantedKeys.forEach((key) => obj[key] = person[key]);
  return obj;
});

工作演示

people = [{
    id: "1",
    name: "abc",
    gender: "m",
    age: "15",
    country: "USA"
  },
  {
    id: "2",
    name: "def",
    gender: "m",
    age: "25",
    country: "BRA"
  },
  {
    id: "3",
    name: "ghi",
    gender: "f",
    age: "05",
    country: "CHI"
  },
  {
    id: "4",
    name: "jkl",
    gender: "m",
    age: "35",
    country: "RUS"
  },
  {
    id: "5",
    name: "mno",
    gender: "m",
    age: "41",
    country: "JAP"
  },
  {
    id: "6",
    name: "pqr",
    gender: "f",
    age: "30",
    country: "COL"
  },
  {
    id: "7",
    name: "stu",
    gender: "f",
    age: "31",
    country: "CAN"
  },
  {
    id: "8",
    name: "vwx",
    gender: "m",
    age: "78",
    country: "USA"
  },
]

wantedKeys = ["name", "age", "country"]

var peopleFiltered = people.map(person => {
  var obj = {};
  wantedKeys.forEach((key) => obj[key] = person[key]);
  return obj;
});

console.log(peopleFiltered);

关于javascript - 如何使用字符串数组来过滤对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69944869/

相关文章:

javascript - 让某些 JS 代码等到另一个命令完成后再执行

java - 聊天机器人从错误的响应数组中返回

html - 当 data 属性为无效 url 时,Chrome 不会呈现 <object> 的替代内容

javascript - 如何使用 for 循环创建对象数组

javascript - 在 nuxt.js 上为 vuetify app v2.0 添加暗模式切换

javascript - Google 脚本 - 将 Gmail 附件添加到云端硬盘中的文档和流程

arrays - 使用 Data.Vector 进行动态编程

java - 从对象初始化数组会产生 NullPointerException

javascript - 如何从 HTML/AJAX 输出 PHP/SQL 结果

c++ - 标准容器没有 std::hash 的特化吗?