首页 > 解决方案 > 努力循环遍历一组对象

问题描述

特别是我想访问答案的数值,以便稍后总结它们。

以前尝试过的长度,它不适用于对象。

这是我的数据:

const qData = [
    {
        id: 0,
        question: "question 1",
        answers: [
            { value: 1, text: "rafael" },
            { value: 2, text: "dontaelo" },
            { value: 3, text: "leonardo" },
            { value: 4, text: "michelangelo" }
        ]
    },
    {
        id: 1,
        question: "question 2",
        answers: [
            { value: 1, text: "rafael" },
            { value: 2, text: "dontaelo" },
            { value: 3, text: "leonardo" },
            { value: 4, text: "michelangelo" }
        ]
    }
];

export default qData;

我试图对答案值求和,如下所示:

handleShowScore = () => {
  var i, newScore;
  var a = qData.answers;

  for (i = 0; i < a.length; i++) {
    newScore = newScore + a[i].value;
  }
}

标签: javascript

解决方案


如果我正确理解了您的问题,下面的示例可以满足您的要求

// Loop through all questions. Each question is stored in "q".
qData.forEach((q) => {
  console.log('qData:', q);
​
  // Make an array of all answer values   
  const answerValues = q.answers.map((a) => {
     return a.value;
  });
  console.log('answerValues:', answerValues);
​
  // Sum all answer values together
  const totalValues = answerValues.reduce((a, b) => a + b, 0)
  console.log('totalValues: ', totalValues);
});

如果您想获得特定ID的总和

// Find specific ID.
const question = qData.find((q) => q.id === 0);

// Make an array of all answer values   
const answerValues = question.answers.map((a) => {
   return a.value;
});
console.log('answerValues:', answerValues);

// Sum all answer values together
const totalValues = answerValues.reduce((a, b) => a + b, 0)
console.log('totalValues: ', totalValues);

推荐阅读