Javascript 如何修复字段名未定义错误?
我有这个Javascript代码来排序字符串,但我得到错误a.k是未定义的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
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();