javascript - 通过在 JSON 数据中查找值来创建新的对象数组

标签 javascript arrays json object

不确定我能做到这一点,但我想做的是通过搜索一些 JSON 数据来查找 key 来创建一个新数组,如果找到 key ,则将整个对象放入新数组中。以下是我正在使用的数据示例。

{
  "students": {
    "AB10001": {
      "campus": "cda",
      "subjects": ["history", "english"],
    }
    "AB10002": {
      "campus": "asd",
      "subjects": ["maths"],
    }
    "AB10003": {
      "campus": "asd",
      "subjects": ["english"],
    }
    "AB10004": {
      "campus": "asd",
      "subjects": ["history"],
    }
    "AB10005": {
      "campus": "cda",
      "subjects": ["maths", "science"],
    }
    "AB10006": {
      "campus": "asd",
      "subjects": ["science"],
    }
    "AB10007": {
      "campus": "cda",
      "subjects": ["science"],
    }
    "AB10008": {
      "campus": "asd",
      "subjects": ["science", "history"],
    }
    "AB10009": {
      "campus": "cda",
      "subjects": ["history"],
    }
    "AB10010": {
      "campus": "cda",
      "subjects": ["history", "maths"],
    }
  }
}

所以我想做的是搜索subjects的students键,找到所有做history的学生,然后从中创建另一个数组,获取整个学生,同时保持原始对象不变。

所以我想最终得到这样的结果:

{
  "historyStudents": {
    "AB10001": {
      "campus": "cda",
      "subjects": ["history", "english"],
    }
    "AB10004": {
      "campus": "asd",
      "subjects": ["history"],
    }
    "AB10008": {
      "campus": "asd",
      "subjects": ["science", "history"],
    }
    "AB10009": {
      "campus": "cda",
      "subjects": ["history"],
    }
    "AB10010": {
      "campus": "cda",
      "subjects": ["history", "maths"],
    }
  }
}

任何见解或帮助都会非常有帮助。提前致谢!

最佳答案

您可以使用 Object.keys()reduce() 创建只有具有 history 科目的学生的新对象。

var data = {"students":{"AB10001":{"campus":"cda","subjects":["history","english"]},"AB10002":{"campus":"asd","subjects":["maths"]},"AB10003":{"campus":"asd","subjects":["english"]},"AB10004":{"campus":"asd","subjects":["history"]},"AB10005":{"campus":"cda","subjects":["maths","science"]},"AB10006":{"campus":"asd","subjects":["science"]},"AB10007":{"campus":"cda","subjects":["science"]},"AB10008":{"campus":"asd","subjects":["science","history"]},"AB10009":{"campus":"cda","subjects":["history"]},"AB10010":{"campus":"cda","subjects":["history","maths"]}}}

var result = {
 historyStudents: Object.keys(data.students)
  .reduce(function(r, e) {
    if(data.students[e].subjects.includes('history')) r[e] = data.students[e]
    return r;
   }, {})
 }

console.log(result)

关于javascript - 通过在 JSON 数据中查找值来创建新的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46793748/

相关文章:

python - 在python中加载json文件

java - 使用 JSON 从 Tumblr 检索和显示图像

javascript - 防止 Controller 中的文本提交失败

c++ - 指针和数组与指针和整数 C++

java - 我试图通过迭代用整数填充数组,但出现 ArrayIndexOutOfBoundsException

Java多线程大数组访问

javascript - 有人愿意看一下这个自定义滚动条的 JS 代码吗?

javascript - Vue js应用程序未在应用程序内部定义

javascript - 如何通过指定条件访问 javascript 对象

javascript - 欺骗浏览器位置以测试 javascript 日期本地化