Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修复字段名未定义错误?_Javascript - Fatal编程技术网

Javascript 如何修复字段名未定义错误?

Javascript 如何修复字段名未定义错误?,javascript,Javascript,我有这个Javascript代码来排序字符串,但我得到错误a.k是未定义的 var dataset = [{ "field1": "dfg34r", "field2": "sdfsd" }, { "field1": "d3f32dg", "field2": "fgjfgj" }, { "field1": "fdbhjjts", "field2": "hswer" }, { "field1": "dfg4r", "field2": "ghje" }, { "f

我有这个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;   

    }); 

  }
var数据集=[{
“字段1”:“dfg34r”,
“字段2”:“sdfsd”
}, {
“字段1”:“d3f32dg”,
“字段2”:“fgjfgj”
}, {
“字段1”:“fdbhjjts”,
“字段2”:“hswer”
}, {
“字段1”:“dfg4r”,
“字段2”:“ghje”
}, {
“字段1”:“fgsdfwe”,
“字段2”:“dhfke”
}];
函数排序列(evt){
var k=evt.target.innerText;//k=单击字段名field1或field2
排序(函数(a,b){
var nameA=a.k.toUpperCase();//此处a.k未定义时出错
var nameB=b.k.toUpperCase();
if(nameA名称B){
返回1;
}
//名字必须相等
返回0;
}); 
}

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

在此上下文中,您必须使用
括号表示法而不是点表示法

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

如果使用
点表示法
,则属性
k
将在对象
a
b
上进行属性查找,而不是在属性
k
中驻留的值。

我认为像下面这样修改代码应该可以解决未定义的问题

  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;   

}); 
函数排序列(evt){
var k=evt.target.innerText;//k=单击字段名field1或field2
dataset.sort(函数(a,b){
var nameA=“”;
var nameB=“”;
如果(k==“字段1”){
nameA=a.field1.toUpperCase();//此处错误a.k未定义
nameB=b.field1.toUpperCase();
}否则{
nameA=a.field2.toUpperCase();//此处错误a.k未定义
nameB=b.field2.toUpperCase();
}
if(nameA名称B){
返回1;
}
//名字必须相等
返回0;
}); 
}


由于在a.k.toUpperCase求值过程中无法动态替换k的值,因此它为a.k提供了未定义的值。

是的,谢谢,它应该是[k]。toUpperCase();