【问题标题】:Iterate over an Object of objects and insert key value pair in each object遍历对象的 Object 并在每个对象中插入键值对
【发布时间】:2021-12-10 03:10:58
【问题描述】:

我试图迭代一个里面有很多小对象的对象。我想有条件地在每个较小的对象中插入一个键值对 例如:

const answers = {
    "question1": {
        answer: "Poor",
        metric: "focus" 
    },
    "question2": {
        answer: {agree: "yes", duration: "10"}
        metric: "exercise"
    }
}

因此假设问题 1 的答案可以是差、好或优秀,差等于 1 分,好等于 5 分,优秀等于 10 分。 根据 question1 中的答案,我想在 question1 对象中添加一个键值对,例如 score: 1

然后对于问题 2,我们查看持续时间,持续时间 10 给我们的分数是 10 所以我们插入像 score: 10 这样的键值对

所以最后我想返回一个看起来像这样的对象:

newAnswers = {
    "question1": {
        answer: "Poor",
        metric: "focus",
        score: 1
    },
    "question2": {
        answer: {agree: "yes", duration: "10"}
        metric: "exercise",
        score: 10
    }
}

在这个例子中,为了简单起见,我只展示了两个问题,但实际上它可能很多,并且相同的逻辑将适用于所有其他问题。

提前致谢

【问题讨论】:

    标签: javascript loops object oop javascript-objects


    【解决方案1】:

    基本上你需要的是一个循环逻辑

    这样的事情会有所帮助。

    逻辑

    • 遍历对象中的条目
    • 检查每个对象中answer键的类型
    • 如果 type 是字符串,则在 "poor", "good", "excellent" 选项之间进行映射。
    • 如果其对象检查duration的有效性并将其分配给分数。

    工作小提琴

    const answers = {
        "question1": {
            answer: "Poor",
            metric: "focus" 
        },
        "question2": {
            answer: {agree: "yes", duration: "10"},
            metric: "exercise"
        }
    };
    
    Object.entries(answers).forEach((item) => {
      const answer = item[1].answer;
      switch (typeof answer) {
        case "string":
          console.log(answer);
          const answerOptions = ["poor", "good", "excellent"];
          const scoreOptions = [1, 5, 10];
          const index = answerOptions.indexOf(answer.toLowerCase());
          if(index !== -1) {
            item[1].score = scoreOptions[index];
          }
          break;
        case "object":
          if (answer.duration && !isNaN(answer.duration)) {
            item[1].score = +answer.duration;
          }
          break;
      }
    });
    console.log(answers)

    【讨论】:

      【解决方案2】:

      如果我正确理解您的问题,那么问题是如何为每个 JSON 对象插入一个新属性。如果是这种情况,您可以按照以下方式进行操作。

      answers["question1"]["score"] = 1;
      

      忽略条件检查您的逻辑(即条件语句),迭代可能是:

      $.each(answers, (q) => {
         q["score"] = x;
      }
      

      【讨论】:

        猜你喜欢
        • 2020-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-15
        • 2011-08-03
        • 2017-09-06
        相关资源
        最近更新 更多