简体   繁体   English

过滤数组,获取列表

[英]Filter array, obtaining a list

I have an array like this:我有一个这样的数组:

["q1":[{"key_api":86,"question_api":"q1","answer_api":"a1"},{"key_api":87,"question_api":"q1","answer_api":"a2"},{"key_api":88,"question_api":"q1","answer_api":"a3"},{"key_api":89,"question_api":"q1","answer_api":"a4"}],
"q2":[{"key_api":90,"question_api":"q2","answer_api":"a5"},{"key_api":91,"question_api":"q2","answer_api":"a7"}{"key_api":92,"question_api":"q2","answer_api":"a9"}],
"q3":[{"key_api":93,"question_api":"q3","answer_api":"a1"},{"key_api":94,"question_api":"q3","answer_api":"a2"},{"key_api":95,"question_api":"q3","answer_api":"a3"},{"key_api":96,"question_api":"q3","answer_api":"a4"}],
"q4":[{"key_api":97,"question_api":"q4","answer_api":"a10"},{"key_api":98,"question_api":"q4","answer_api":"a11"},{"key_api":99,"question_api":"q4","answer_api":"a12"},{"key_api":100,"question_api":"q4","answer_api":"a13"}]]

Also, I have this string:另外,我有这个字符串:

"q4"

I'd like to filter the array, obtaining this list (in practice, the possible answers for the third question):我想过滤数组,获取这个列表(实际上是第三个问题的可能答案):

["a10", "a11", "a12", "a13"]

I prefer native js, if possible (but if it involves a lot of code I can consider libraries).如果可能的话,我更喜欢原生 js(但如果它涉及大量代码,我可以考虑使用库)。 I'm using js for one week now: operations like this one feel natural in Python but here I'm in trouble.我现在使用 js 一周了:像这样的操作在 Python 中感觉很自然,但在这里我遇到了麻烦。 Thanks a lot!非常感谢!

Assuming the initial JSON you provided is actually meant to be an object consisting of properties that are arrays (because JSON arrays cannot have properties), you would simply use Array.prototype.map on one of the object's properties:假设您提供的初始 JSON 实际上是一个由数组属性组成的对象(因为 JSON 数组不能有属性),您只需在对象的属性之一上使用Array.prototype.map

 const dataObject = { "q1": [{ "key_api": 86, "question_api": "q1", "answer_api": "a1" }, { "key_api": 87, "question_api": "q1", "answer_api": "a2" }, { "key_api": 88, "question_api": "q1", "answer_api": "a3" }, { "key_api": 89, "question_api": "q1", "answer_api": "a4" }], "q2": [{ "key_api": 90, "question_api": "q2", "answer_api": "a5" }, { "key_api": 91, "question_api": "q2", "answer_api": "a7" }, { "key_api": 92, "question_api": "q2", "answer_api": "a9" }], "q3": [{ "key_api": 93, "question_api": "q3", "answer_api": "a1" }, { "key_api": 94, "question_api": "q3", "answer_api": "a2" }, { "key_api": 95, "question_api": "q3", "answer_api": "a3" }, { "key_api": 96, "question_api": "q3", "answer_api": "a4" }], "q4": [{ "key_api": 97, "question_api": "q4", "answer_api": "a10" }, { "key_api": 98, "question_api": "q4", "answer_api": "a11" }, { "key_api": 99, "question_api": "q4", "answer_api": "a12" }, { "key_api": 100, "question_api": "q4", "answer_api": "a13" }] }; console.log(dataObject['q4'].map(item => item.answer_api));

If you want to do this for all of the entries/keys in the object, you can combine this with Object.keys by iterating over the return value, like so:如果要对对象中的所有条目/键执行此操作,可以通过迭代返回值将其与Object.keys结合,如下所示:

 const dataObject = { "q1": [{ "key_api": 86, "question_api": "q1", "answer_api": "a1" }, { "key_api": 87, "question_api": "q1", "answer_api": "a2" }, { "key_api": 88, "question_api": "q1", "answer_api": "a3" }, { "key_api": 89, "question_api": "q1", "answer_api": "a4" }], "q2": [{ "key_api": 90, "question_api": "q2", "answer_api": "a5" }, { "key_api": 91, "question_api": "q2", "answer_api": "a7" }, { "key_api": 92, "question_api": "q2", "answer_api": "a9" }], "q3": [{ "key_api": 93, "question_api": "q3", "answer_api": "a1" }, { "key_api": 94, "question_api": "q3", "answer_api": "a2" }, { "key_api": 95, "question_api": "q3", "answer_api": "a3" }, { "key_api": 96, "question_api": "q3", "answer_api": "a4" }], "q4": [{ "key_api": 97, "question_api": "q4", "answer_api": "a10" }, { "key_api": 98, "question_api": "q4", "answer_api": "a11" }, { "key_api": 99, "question_api": "q4", "answer_api": "a12" }, { "key_api": 100, "question_api": "q4", "answer_api": "a13" }] }; Object.keys(dataObject).forEach(key => { console.log(dataObject[key].map(item => item.answer_api)); })

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

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