【问题标题】:Find how many times each response was given for each question找出每个问题的每个答案被给出了多少次
【发布时间】:2023-02-04 22:26:32
【问题描述】:

调查数据 每个对象都是一项调查,最多可以有 10 个问题和最多 5 个不同的回答。

 const allSubmittedSurveysData:{}[] = [
        {
            surveyGUID:'1234',
            q1ID: '0001',
            q1Response:'Very Satisfied',
            q2ID: '0002',
            q2Response:'Very Happy',
            q3ID: '0003',
            q3Response:'Satisfied',
            q4ID: '0004',
            q4Response:'Very Satisfied',
            q5ID: '0005',
            q5Response:'Very Satisfied',
            q6ID: '0006',
            q6Response:'Very Satisfied',
            q7ID: '0007',
            q7Response:'Very Satisfied',
            q8ID: '0008',
            q8Response:'Very Satisfied',
            q9ID: '0009',
            q9Response:'Very Satisfied',
            q10ID: '0010',
            q10Response:'Very Satisfied',
        },
        {
            surveyGUID:'1235',
            q1ID: '0001',
            q1Response:'Satisfied',
            q2ID: '0002',
            q2Response:'Unhappy',
            q3ID: '0003',
            q3Response:'Dissatisfied',
            q4ID: '0004',
            q4Response:'Dissatisfied',
            q5ID: '0005',
            q5Response:'Very Satisfied',
           
        },
        {
            surveyGUID:'1236',
            q1ID: '0001',
            q1Response:'Dissatisfied',
            q2ID: '0002',
            q2Response:'Neutral',
            q3ID: '0003',
            q3Response:'Satisfied',
            q4ID: '0004',
            q4Response:'Very Dissatisfied',
            q5ID: '0005',
            q5Response:'Very Satisfied',

        },
       
    ]
  let responseCounts: Record<string, any> = {}
    allSubmittedSurveysData.forEach((survey: Record<string,any>) => {
        Object.keys(survey).forEach(key => {

            if(key!=='surveyGUID') {
                let questionKey = key.replace('Response', 'ID')
                let responseKey= key.replace('ID','Response')
                
                if(!Object.keys(responseCounts).includes(survey[questionKey])){
                    responseCounts[survey[questionKey]]={}
                }
        
                if(!Object.keys(responseCounts[survey[questionKey]]).includes(survey[responseKey])){
                    responseCounts[survey[questionKey]][survey[responseKey]]= 1
                } else{
                    ++responseCounts[survey[questionKey]][survey[responseKey]]
                    
                }
            }
        })
    })

示例预期输出:

responseCounts= {
      0001:{
        Very Satisfied:1,
        Satisfied:1,
        Dissatisfied:1
      },
      0002:{...},
      0003:{...},
      etc
      
    
    } 

我正在制作一个“responseCounts”对象,每个问题 ID 都有一个对象。在每个问题 ID 对象中,我已经将响应作为键,并且在第一个实例中,如果“responseCounts”键不包含响应,则创建键并将 1 作为值。在随后的循环中,如果响应已经是对象中的键并且再次给出响应,我希望它添加一个。 if 条件按预期工作。 else 是获取值并将其加倍,而不是每次满足条件时都加一个。

【问题讨论】:

    标签: javascript foreach nested-object


    【解决方案1】:

    您实际上添加了两次,一次用于 ID 键,一次用于 Response 键。

    比较你的版本

                if(key!=='surveyGUID') {
                    let questionKey = key.replace('Response', 'ID')
                    let responseKey= key.replace('ID','Response')
    

    有了这个:

                if(key!=='surveyGUID' && key.includes('Response')) {
                    let questionKey = key.replace('Response', 'ID')
                    let responseKey= key
    

    【讨论】:

    • 这次真是万分感谢。你能解释一下你是怎么抓住它的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多