如何访问json对象数组中的optionsArray

时间:2018-10-14 12:06:24

标签: node.js json

我正在尝试访问存储在each_question中的json对象数组内部的options Array,当我说each_question.text时它正在打印该数组中的文本,但是当我们说each_question.options时它应该打印options数组但显示为未定义

app.post('/Evaluate',(req,res,err) => {
if(req){
    var answered_questions=req.body;
    console.log(answered_questions)

 }else
     {
    console.log(err)
 }
quiz.find({},(err,data) => {
    if(err){
        console.log(err);
     }
        console.log(data);
        var totalCorrect = 0;
        for(each_question_index in data){
            each_question = data[each_question_index]
            for(each_answered_question_index in answered_questions){
                each_answered_question = answered_questions[each_answered_question_index]
                if(each_question._id === each_answered_question.Q_id){
                    // console.log('executing')
                    console.log(each_question);
                    console.log(each_question.options)
                    for(each_option_index in each_question.options){
                        each_option=each_question.options[each_option_index]
                        if(each_option.o_id === each_answered_question.opt_id){
                            if(each_option.is_correct === 1){
                                totalCorrect = totalCorrect + 1;
                            }
                        }
                    }
                }
            }
        }

这是我的JSON数据

[{
    _id: '5bbee515bb34b98be0464c76',
    text: 'who is the latest version of Angular?',
    options: [{
        o_id: 151,
        option: 'four',
        is_correct: 0
    }, {
        o_id: 152,
        option: 'five',
        is_correct: 0
    }, {
        o_id: 153,
        option: 'six',
        is_correct: 1
    }, {
        o_id: 151,
        option: 'seven',
        is_correct: 0
    }],
    selected: ''
} {
    _id: '5bbee759bb34b98be0464c77',
    text: 'The 2019cricket world cup will be held in which country?',
    options: [{
        o_id: 161,
        option: 'Australia',
        is_correct: 0
    }, {
        o_id: 162,
        option: 'India',
        is_correct: 0
    }, {
        o_id: 163,
        option: 'England',
        is_correct: 1
    }, {
        o_id: 161,
        option: 'Pakistan',
        is_correct: 0
    }],
    selected: ''
} {
    _id: '5bbee7dbbb34b98be0464c78',
    text: 'who is the first player to score a double century in the circket?',
    options: [{
        o_id: 171,
        option: 'Sachin tendulkar',
        is_correct: 1
    }, {
        o_id: 172,
        option: 'Rohitsharma',
        is_correct: 0
    }, {
        o_id: 173,
        option: 'chrisGyale',
        is_correct: 0
    }, {
        o_id: 171,
        option: 'ABDevilliers',
        is_correct: 0
    }],
    selected: ''
}]

2 个答案:

答案 0 :(得分:0)

使用Array.filter获取项目:

const arr = [{
        o_id: 142,
        option: 'billgates',
        is_correct: 0
    },
    {
        o_id: 143,
        option: 'stevejobs',
        is_correct: 0
    },
    {
        _id: '5bbee515bb34b98be0464c76',
        text: 'who is the latest version of Angular?',
        options: [{
                o_id: 151,
                option: 'four',
                is_correct: 0
            },
            {
                o_id: 152,
                option: 'five',
                is_correct: 0
            },
            {
                o_id: 153,
                option: 'six',
                is_correct: 1
            },
            {
                o_id: 151,
                option: 'seven',
                is_correct: 0
            }
        ],
        selected: ''
    }
];

let targetArr = arr.filter(item =>
    item.hasOwnProperty('options') && Array.isArray(item.options));
    
console.log(targetArr);

答案 1 :(得分:0)

您可以在数据之类的数据上简单地使用.map或.forEach

使用.map

data.map((item, index) =< {
      console.log("_id", item._id);
      console.log("text", item.text);
      console.log("options", item.options);//this will print options array
      if(Array.isArray(item.options) && item.options.length > 0){
         item.options.map((option, i) => { // here iterate options array and get values from objects
           console.log("o_id", option.o_id);
           console.log("option", option.option);
           console.log("is_correct", option.is_correct);
         }
      }
   }

使用.forEach

  data.forEach((item, index) =< {
  console.log("_id", item._id);
  console.log("text", item.text);
  console.log("options", item.options);
  if(Array.isArray(item.options) && item.options.length > 0){
     item.options.forEach((option, i) => {
       console.log("o_id", option.o_id);
       console.log("option", option.option);
       console.log("is_correct", option.is_correct);
     }
  }
}