首页 > 解决方案 > Javascript循环遍历数组:无法读取未定义的属性“切片”

问题描述

我的 api 响应如下所示:

id: (...)
user_id: (...)
symptoms: "Sore throat, Headache"

id: (...)
user_id: (...)
symptoms: "Anorexia  (Loss of appetite), Shortness of breath (Difficult in breathing), Myalgias (Muscle pains), Sore throat, Headache"

我正在尝试将用户症状与现有症状类别相匹配。一个用户最多可以有 14 个症状。当我拆分和切片数组以获取单个症状并匹配它们时,我不断收到无法读取未定义的属性“切片”的错误。

如果用户的症状少于 14 个,我尝试为对象设置默认值时,错误仍然存​​在。

我的代码:

getSymNum (symp, c) {
        var counter = 0

      for (var xc in c) {

        var symp1 = c[xc].symptoms.split(',')[0]
        var symp2 = c[xc].symptoms.split(',')[1].slice(1)
        var symp3 = c[xc].symptoms.split(',')[2].slice(2)
        var symp4 = c[xc].symptoms.split(',')[3].slice(3)
        var symp5 = c[xc].symptoms.split(',')[4].slice(4)
        var symp6 = c[xc].symptoms.split(',')[5].slice(5)

        if (symp3 !== undefined){       
        console.log("hello ha")
        
        }

        if (symp1 === symp) {
        counter++
        } else if (symp2 === symp) {
          counter++
        } else if (symp3 === symp)  {
          counter++
        } else if (symp4 === symp) {
          counter++
        } else if (symp5 === symp) {
          counter++
        } else if (symp6 === symp) {
          counter++
        }

      }
      return counter  
      
    },

标签: javascriptarrays

解决方案


您可以使用数组/字符串方法优化检查,例如contains()or indexOf()

etSymNum (symp, c) {
  var counter = 0

  for (var xc in c) {
    if(c[xc].symptoms.indexOf(symp) !== -1){
      counter++;
    }
  }
  return counter  
},

推荐阅读