Фильтр массива, получение списка - PullRequest
1 голос
/ 08 января 2020

У меня есть такой массив:

["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"}]]

Кроме того, у меня есть эта строка:

"q4"

Я бы хотел отфильтровать массив, получив этот список (на практике , возможные ответы на третий вопрос):

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

Я предпочитаю нативный js, если это возможно (но если в нем много кода, я могу рассмотреть библиотеки). Я пользуюсь js уже неделю: такие операции кажутся естественными в Python, но здесь у меня проблемы. Большое спасибо!

1 Ответ

2 голосов
/ 08 января 2020

Если исходное значение 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));

Если вы хотите сделать это для всех записей / ключей в объекте, вы можете объединить это с 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));
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...