如何修复字段名称是未定义的错误?

时间:2016-12-25 13:35:35

标签: javascript

我有这个Javascript代码来排序字符串,但我得到错误a.k未定义

var dataset = [{
  "field1": "dfg34r",
  "field2": "sdfsd"
}, {
  "field1": "d3f32dg",
  "field2": "fgjfgj"

}, {
  "field1": "fdbhjjts",
  "field2": "hswer"
}, {
  "field1": "dfg4r",
  "field2": "ghje"
}, {
  "field1": "fgsdfwe",
  "field2": "dhfke"
}];

function sort_col(evt){
  var k = evt.target.innerText; //k = clicked field name field1 or field2

    dataset.sort(function (a, b) {      

      var nameA = a.k.toUpperCase(); // error here a.k is undefined
      var nameB = b.k.toUpperCase(); 


      if (nameA < nameB) {
        return -1;
      }

      if (nameA > nameB) {
        return 1;
      }

      // names must be equal
      return 0;   

    }); 

  }

如果我删除toUpperCase代码正常工作,那么我如何修复此错误并能够将字符串转换为大写?

2 个答案:

答案 0 :(得分:1)

您必须在此上下文中使用bracket notation而不是点符号

var nameA = a[k]toUpperCase(); 
var nameB = b[k]toUpperCase(); 

如果您使用dot notation,则属性会查找对象ab将会发生属性k,而不是内部的值。

答案 1 :(得分:0)

我认为修改下面的代码应解决未定义的问题。

  function sort_col(evt){
   var k = evt.target.innerText; //k = clicked field name field1 or field2

  dataset.sort(function (a, b) {
  var nameA = "";
  var nameB = "";     
  if(k=="field1"){
  nameA = a.field1.toUpperCase(); // error here a.k is undefined
  nameB = b.field1.toUpperCase();
   }  else{
  nameA = a.field2.toUpperCase(); // error here a.k is undefined
  nameB = b.field2.toUpperCase();
 }



  if (nameA < nameB) {
    return -1;
  }

  if (nameA > nameB) {
    return 1;
  }

  // names must be equal
  return 0;   

}); 

}

它为a.k提供了未定义,因为它无法在a.k.toUpperCase评估期间动态替换k的值。