2017-01-26 1 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"입니다. 이는 거짓입니다. 그런 다음 다음 코드 인 5 === 5이 true이므로 case 블록 안의 코드가 실행됩니다.

정규 표현식에 대해 확신 할 수 없으며 이유는 무엇이 었는지를 알 수 있습니다.하지만 어쨌든 "NK" === /NK/은 false이므로 일치하지 않습니다. 이 솔루션은 쉽게 비교할 수있는 값으로 평가되는 스위치 식을 사용하고 이에 따라 사례 식을 작성하는 것입니다. 따라서 스위치 식에서 "NK"의 첫 번째 항목의 인덱스를 확인하고 인덱스 0에서 발생하는 경우 문자열의 첫 번째 인덱스 - case 블록 안의 코드를 실행합니다.

+0

완벽하게 작동합니다. 고맙습니다! 제가 잘못 된 곳과 내가 한 것과 당신의 해결책 사이의 차이점을 설명해주십시오. 다시 한 번 감사드립니다! –

+0

@DylanBaxter 몇 가지 설명 추가 - JS regexes 및 스위치에 대한 지식이 제한되어 있지만 잘하면 적어도 뭔가를 정리합니다 – Fissio

+0

설명 해 주셔서 감사합니다. 전체 배열을 검사하고 각 그룹마다 다른 우선 순위를 설정해야하기 때문에 (NK의 우선 순위 1, NB의 우선 순위 2 등) 정규 표현식을 사용하여 첫 번째 문자를 확인해야합니다. 그렇지 않으면, 일련의 if 문? –

관련 문제