我有两个html datalists,我得到他们的输入值来查询json文件。我首先搜索我的json文件的密钥,这些密钥是大学专业,他们的价值观是他们的课程。所以一旦对象键等于程序,我就返回该元素,因为我想用第二个输入字段进一步查询该元素,这是一个课程编号。返回与程序输入相对应的正确程序课程时,此步骤始终成功。
第二步是事情变得糟糕。我现在想要获取该程序元素并查看该程序中所有课程的名称。我连接两个输入字段,程序+“”+课程。该计划是像“CSE”或“I S”这样的主要课程,课程是任何3位数字,如“143”或“310”。程序中的每个对象元素都有一个字符串名称属性,如“CSE 143”。这个name属性不等于program +“”+ course,即使它们都是类型字符串和相同的值,而我正在查看其中有空格的程序。例如,我想找到“I S 310”课程。我成功搜索了等于“I S”的程序名称。我遍历键并使用此操作Object.keys(jsondata [index])== program找到正确的元素值。 program是一个包含字符串“I S”的变量。如前所述,这是成功的,但是如果我遍历该objectkey值的子节点来查找id,比如programdata [index] .children == program +“”+ course,它就不起作用了。如果我改为对该值进行硬编码,那么programdata [index] .children ==“I S 310”就可以了!这使我相信这两个变量的串联操作会改变字符串的编码。根据console.log,“I S 310”和程序+“”+类型都是字符串,除了它们输出不同的encodeURIComponent()。
我写了输出到控制台的内容,因为我没有足够的信誉:
function getProgramCourses(data, program) {
var programKeys = Object.keys(data);
for (var i = 0; i < programKeys.length; i++) {
if (Object.keys(data[i]) == program) {
return data[i][Object.keys(data[i])];
}
}
return objs
}
program = "CSE"
console.log(program)
console.log(encodeURIComponent(program));
输出:
CSE
CSE
program = "I S"
console.log(program)
console.log(encodeURIComponent(program));
输出:
我是
I%C2%A0S
那些未编码的隐藏角色不会影响找到“I S”计划提供的课程的第一步。现在,当我想在“I S”程序中找到一个特定的课程,如“I S 310”:
//data is object array of all courses in this program
function getCourse(data, program, course) {
pc = program + " " course;
for (var i = 0; i < data.length; i++) {
if (data[i].name == pc) {
return data[i];
}
}
}
"CSE" = program and "143" = course
pc = program + " " + course;
console.log(pc)
console.log(encodeURIComponent(pc));
输出:
CSE 142
CSE%20142
[“I S”=节目,“310”=课程] [2]
pc = program + " " + course;
console.log(pc)
console.log(encodeURIComponent(pc));
输出:
我是S3 310
I%C2%A0S%20310
此第二步仅适用于没有“CSE”或“MATH”等空格的程序。不适用于“A A”或“I S”。 data [i] .name是String类型,因此是pc。 对于冗长的帖子感到抱歉,我只是希望尽可能具有描述性。任何帮助将不胜感激。
这是我的问题:
console.log("A A 198")
console.log(encodeURIComponent("A A 198"))
console.log(program + " " + course)
console.log(encodeURIComponent(program + " " + course))
输出:
A A 198
A%20A%20198
A A 198
A%C2%A0A%20198
答案 0 :(得分:1)
您的程序变量包含一个类似于空格但不是空格的字符。确保它不是编码问题,否则你可以使用这个简单的代码解决这个问题。
encodeURIComponent(program.replace(/\u00a0/g, ' ') + ' ' + course)