无法访问JSON对象属性

时间:2017-01-26 12:55:37

标签: javascript arrays json object

我无法访问JSON对象的属性。我正在使用SheetJS来解析excel文件并将其存储为JSON对象的数组。这部分工作正常(getData()函数)。我想解析这个数组并设置一个新的属性,如果" RunName"物业以" NK"开头。我试图实现一个' setPriority()'函数,但代码找不到RunName属性,给我一个未解析的变量名称'错误。我已经添加了我的代码和下面数组结构的示例。任何帮助深表感谢。 感谢:)

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

1 个答案:

答案 0 :(得分:0)

尝试

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

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

switch语句评估switch的括号内的表达式,然后尝试使用严格比较将评估的表达式与案例表达式匹配,因此使用{{1} }。例如,如果我们有以下代码:

===

首先,评估var i = 5; switch (i) { case ("5"): console.log("Five as string"); break; case (5): console.log("Five"); break; } ,得到值i。然后逐个案例表达案例表达式,首先测试5,这是假的。然后是下一个5 === "5",这是真的,因此执行case块内的代码。

我不确定正则表达式以及为什么会出现错误,但无论如何,5 === 5都是错误的,所以它无法匹配。解决方案就是使用一个开关表达式来计算一个容易比较的值,并相应地创建case表达式 - 所以在switch表达式中,我们检查第一次出现"NK" === /NK/的索引,如果它出现在index 0 - 字符串的第一个索引 - 我们执行case块内的代码。