2017-01-26 8 views
0

JSONオブジェクトのプロパティにアクセスできません。私はSheetJSを使ってExcelファイルを解析し、それをJSONオブジェクトの配列として格納しています。この部分はうまく動作します(getData()関数)。 "RunName"プロパティが "NK"で始まる場合は、この配列を解析して新しいプロパティを設定します。私は 'setPriority()'関数を実装しようとしましたが、コードはRunNameプロパティを見つけられず、 '解決されていない変数名'エラーが出ます。私は私のコードと配列の構造の例を以下に追加しました。どんな助けでも大歓迎です。 感謝:)JSONオブジェクトのプロパティにアクセスする

var url = "TestData.xlsx"; 
var oReq = new XMLHttpRequest(); 
oReq.open("GET", url, true); 
oReq.responseType = "arraybuffer"; 

function getData() { 

    oReq.onload = function (e) { 
     var arraybuffer = oReq.response; 

     /* convert data to binary string */ 
     var data = new Uint8Array(arraybuffer); 
     var arr = new Array(); 
     for (var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]); 
     var bstr = arr.join(""); 


     /* Call XLSX */ 
     var workbook = XLSX.read(bstr, {type: "binary"}); 

     /* DO SOMETHING WITH workbook HERE */ 
     var first_sheet_name = workbook.SheetNames[0]; 
     var worksheet = workbook.Sheets[first_sheet_name]; 

     var array = XLSX.utils.sheet_to_json(worksheet, {raw: true}); 


     console.log(array); 


     setPriority(array); 


    }; 

    oReq.send(); 

} 


function setPriority(array) { 


    for (var i = 0; i < array.length; i++) { 

     switch (array[i].RunName) { 

      case (/NK/): 
       array[i].Priority = 2; 


     } 


    } 
} 

enter image description here

答えて

0

switch (array[i].RunName.indexOf('NK')) { 

    case (0): 
     array[i].Priority = 2; 
} 

switch文は、スイッチの括弧内の式を評価し、その後厳密な比較を使用した場合の表現に対する評価された式に一致するようにしようと試してみてくださいですので、===を使用してください。たとえば、我々は次のコードがある場合:

var i = 5; 
switch (i) { 
    case ("5"): 
    console.log("Five as string"); 
    break; 
    case (5): 
    console.log("Five"); 
    break; 
} 

をまず、iは値5が得られ、評価されます。次にケースの式はケースごとに評価され、最初に5 === "5"をテストします。これはfalseです。次の1つは5 === 5です。つまり、caseブロック内のコードが実行されます。

正規表現についてわかりませんし、なぜあなたが行ったエラーが発生したのですか。いずれにしても、"NK" === /NK/は偽であるため、一致する方法はありません。その解決策は、簡単に比較可能な値に評価するスイッチ式を使用し、それに応じてケース式を作成することです。スイッチ式では、最初の出現のインデックスを"NK"にチェックし、インデックス0文字列の最初のインデックス - caseブロック内のコードを実行します。

+0

これは完全に機能します。ありがとうございました!私がどこに間違っていたのか、私が行ったこととあなたの解決策の違いについて説明してください。再度、感謝します! –

+0

@DylanBaxterいくつかの説明を追加 - JS regexesとスイッチに関する私の知識は限られていますが、うまくいけば少なくとも何かをクリアします – Fissio

+0

説明をいただきありがとうございます。配列全体を確認し、グループごとに異なる優先順位を設定する必要があるため(NKの優先度1、NBの優先度2など)、最初の文字を確認するために正規表現を使用する必要があります。さもなければ、一連のif文? –

関連する問題