提问者:小点点

在数组中循环的Javascript:无法读取未定义的属性“slice”


我的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个症状。 当我拆分和切片数组以获取单个症状并匹配它们时,我一直得到一个无法读取未定义的属性'slice'的错误。

如果用户的症状少于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  
      
    },

共1个答案

匿名用户

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

etSymNum (symp, c) {
  var counter = 0

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