SkuPak
SkuPak

Reputation: 367

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). I'm using js for one week now: operations like this one feel natural in Python but here I'm in trouble. Thanks a lot!

Upvotes: 1

Views: 48

Answers (1)

gabriel.hayes
gabriel.hayes

Reputation: 2313

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:

   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:

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));
})

Upvotes: 2

Related Questions