[英]Find value in multidimensional array. 3 levels deep
我或多或少有這樣的數組
questionnaires[
{
'id': 14,
question_asked_groups: [
{
'id': 11,
questions_asked: [
{
'id': 10,
'list_id': 147,
'answer': "A lot of the time"
},
{
'id': '11',
'list_id': 148,
'answer': "Quite often"
},
]
},
{
'id': 22,
questions_asked: [
{
'id': 13,
'list_id': 188,
'answer': "Never"
},
{
'id': '14',
'list_id': 190,
'answer': "Yesterday"
},
]
},
]
},
]
我需要將正確的按鈕(答案)設置為活動狀態。 數組是數組中所有已回答問題的集合,結構如下
questionnaire
-> question_asked_groups
-> questions_asked
因此,在使用所有按鈕加載屏幕時,當加載任何按鈕時,我想獲取其ID(例如147)並在questionnaires
數組中搜索它並返回answer
希望有道理。 如果您有任何問題,我將擴大問題。
我嘗試過實現與我相似的東西。
_find(array, list_id) {
let object;
array.some(function f(a) {
if (a.list_id === list_id) {
object = a;
return true;
}
if (Array.isArray(a.items)) {
return a.items.some(f);
}
});
return object;
}
但是不能使其工作。
PS。 不知道這種事情是否有lodash解決方案。 我曾見過這樣的解決方案這樣 ,但藏漢失敗。
我首先map
到一個question_asked_groups
數組的數組,然后使用.flat
展平-然后,您可以使用.find
找到合適的對象:
const questionnaires=[{id:14,question_asked_groups:[{id:11,questions_asked:[{id:10,list_id:147,answer:"A lot of the time"},{id:"11",list_id:148,answer:"Quite often"}]},{id:22,questions_asked:[{id:13,list_id:188,answer:"Never"},{id:"14",list_id:190,answer:"Yesterday"}]}]}]; const allQuestionsAsked = questionnaires.map( ({ question_asked_groups }) => question_asked_groups.map( ({ questions_asked }) => questions_asked ) ).flat(2); console.log( allQuestionsAsked.find(({ list_id }) => list_id === 147).answer );
對於較舊的瀏覽器,要么包含一個polyfill,要么使用其他方法:
const questionnaires=[{id:14,question_asked_groups:[{id:11,questions_asked:[{id:10,list_id:147,answer:"A lot of the time"},{id:"11",list_id:148,answer:"Quite often"}]},{id:22,questions_asked:[{id:13,list_id:188,answer:"Never"},{id:"14",list_id:190,answer:"Yesterday"}]}]}]; const allQuestionsAsked = []; questionnaires.forEach( ({ question_asked_groups }) => question_asked_groups.forEach( ({ questions_asked }) => allQuestionsAsked.push(...questions_asked) ) ); console.log( allQuestionsAsked.find(({ list_id }) => list_id === 147).answer );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.