【问题标题】:Errors while matching json objects based on similar object values基于相似对象值匹配 json 对象时出错
【发布时间】:2020-01-28 21:08:54
【问题描述】:

在我的 react 应用程序中,我有两个 JSON 对象,其中包含用户测验结果。我的目标是使用循环中的某种循环生成 roomSurveys 中每个测验的答案与 userSurvey 答案相同的百分比值。

  const [userSurvey, setUserSurvey] = useState({ "Q1":"A",
                                                 "Q2":"B, C, A",
                                                 "Q3":"C" });

  const [roomSurveys, setRoomSurveys] = useState({
                                         "user2":{ "Q1":"A",
                                                   "Q2":"B, C, C",
                                                   "Q3":"B" },
                                         "user3":{ "Q1":"C",
                                                   "Q2":"B",
                                                   "Q3":"B" },
                                               });

计算共同答案的函数将更新如下状态:

const [roomMatches, setRoomMatches] = useState({
                                         "user2":{ "percentMatch":"1.0"},
                                         "user3":{ "percentMatch": ".30"}
                                               })

这是我目前得到的:

      //loop through each user survey in the roomSurvey object
      for (var key of Object.keys(roomSurveys)) {
        var countSame;
        var countTotal;
      //loop through each user survey within the roomSurvey object
        for (var key of Object.keys(roomSurveys[key])) {
          //if answer matches userSurvey answer for the same key,
          //add to count same and count total else, add to count total
          if(roomSurveys[key] == userSurvey[key]){
            countSame++;
            countTotal++;
          }else{
            countTotal++;
          }

          console.log(key + " -> " + roomSurveys[key])
          console.log(key + " -> " + userSurvey[key])
        }
        var percentMatched = countSame/countTotal;
        setRoomMatches([...roomMatches, {key:{['percentMatch']: percentMatched}}]);
      }

这是我遇到的错误:

  • 在第二个 for 循环中,roomSurveys[key] 值始终未定义
  • roomMatches 不可迭代(尝试将新的匹配百分比添加到 roomMatches 状态时)

【问题讨论】:

  • 那些只是对象,不是 json。

标签: javascript json reactjs loops for-loop


【解决方案1】:

您已经在第二个 for 循环中覆盖了您的关键变量。您需要将它们命名为 key1 和 key2(或更详细的名称)

【讨论】:

    【解决方案2】:

    您对key 变量使用相同的名称,重命名它们并根据需要使用它们。

    ...               V
          for (var survey of Object.keys(roomSurveys)) {
            var countSame;
            var countTotal;
                       v
            for (var room of Object.keys(roomSurveys[survey])) {
    ...
    

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多