我无法访问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;
}
}
}
答案 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块内的代码。