2016-12-25 16 views
-3

私は、文字列を並べ替えるために、このJavaScriptコードを持っているが、私はtoUpperCaseは通常ので、私はこのエラーを修正し、大文字に文字列を変換することができるかをコードする作業を削除した場合、エラー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; 

    }); 

    } 

を定義されていないのですか?あなたはdot notation使用する場合は、代わりにドット表記のこの文脈でbracket notationを使用する必要が

答えて

1

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

、プロパティオブジェクトa上見上げるとbは財産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.toUpperCase評価中に動的にkの値を交換することはできないので、それはa.kため未定義与えています。

関連する問題