【问题标题】:Iterating over object that contains objects to use result迭代包含要使用结果的对象的对象
【发布时间】:2020-08-30 13:04:59
【问题描述】:

我有一个 React 程序,它会询问用户一堆不同的问题,一旦用户完成,他们就会被带到一个结果页面。现在在该页面上,我想根据给出的答案以有意义的方式显示结果。但我无法使用包含所有答案的对象。

调查问题返回一个内部有多个对象的对象,我想做的是迭代对象并说例如“天空是什么颜色”==“蓝色”正确答案+= 1或类似那。但它变得有点复杂,其中一些嵌套对象包含一个数组,而其他对象可能包含另一个对象。

返回的答案对象如下所示:

Object {
   "whats 2 + 2" : "4"
   "what color is the sky" : "blue"
   "which are breeds of dog" : ["golden retriever", "pug"]
   "do you like studying" : Object {row 1: "3", row 2: "5", row 3: "2"}
}

对象的返回类型取决于它是什么形式的问题,如果用户可以回答多个问题,它会返回一个数组,而矩阵类型的问题会返回另一个对象,例如“做你喜欢学习”。

有没有办法迭代这样的答案?还是我必须以不同的方式去做。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript reactjs object


    【解决方案1】:

    您可以使用Object.keys().forEach() 迭代主数据对象,然后使用Array.isArray().typeof() 检查对象项类型 你可以像这样迭代你的结构:

    let answers =  {
       "whats 2 + 2" : "4",
       "what color is the sky" : "blue",
       "which are breeds of dog" : ["golden retriever", "pug"],
       "do you like studying" : {row1: "3", row2: "5", row3: "2"}
    }
    
    Object.keys(answers).forEach((el) => {
      if(Array.isArray(answers[el])) {
        answers[el].forEach((answer) => {
          console.log('Inside Array: ', answer);
        });
        
      } else if(typeof answers[el] === 'object') {
         Object.keys(answers[el]).forEach((key) => {
           console.log('Inside nested Object: ', key, answers[el][key]);
         });
      }
      else {
        console.log('Object entry: ' + answers[el]);
      }
    });

    【讨论】:

      【解决方案2】:

      您可以使用对象的条目函数来获取键值对,然后对其进行迭代。这里使用数组解构得到keyvalue

      Object.entries(object).forEach(([key, value]) => { /* do something */})

      let answers = {
        "whats 2 + 2": "4",
        "what color is the sky": "blue",
        "which are breeds of dog": ["golden retriever", "pug"],
        "do you like studying": {
          science: "3",
          math: "5",
          art: "2"
        }
      }
      
      const dogs = ["golden retriever", "poodle", "pug"];
      
      Object.entries(answers).forEach(([key, value]) => {
        switch (value.constructor.name) {
          case 'Array':
            console.log(`${key}? ${value.map(dog => `${dog}${dogs.includes(dog) ? '✔️' : '❌'}`)}`);
            break;
          case 'Object':
            Object.entries(value).forEach(([key, value]) => {
              console.log(`On a scale of 1-5, how much do you like studying ${key}? ${value} ${value >= 3 ? '✔️' : '❌'}`);
            });
            break;
          default:
            console.log(`${key}? ${value === "4" || value === 'blue' ? '✔️' : '❌' }`);
            break;
        }
      });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-03
        • 2017-12-22
        • 1970-01-01
        • 2011-12-06
        相关资源
        最近更新 更多