我有这个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
代码正常工作,那么我如何修复此错误并能够将字符串转换为大写?
答案 0 :(得分:1)
您必须在此上下文中使用bracket notation
而不是点符号
var nameA = a[k]toUpperCase();
var nameB = b[k]toUpperCase();
如果您使用dot notation
,则属性会查找对象a
,b
将会发生属性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的值。