2016-12-25 149 views
-3

我有這樣的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代碼的正常工作,所以我怎麼能解決這個錯誤,並能字符串轉換爲大寫?

回答

1

你必須要在這種情況下,而不是一個點符號使用bracket notation

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

如果使用dot notation,那麼財產查找過對象ab會發生的財產k,而不是其價值駐留在那裏。

+1

是的,謝謝,它應該是[k] .toUpperCase(); – Wel

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的值。