我有两个html数据列表,我得到了它们的输入值来查询json文件。我首先搜索我的json文件的键,这些键是大学专业,他们的价值观是他们的课程。因此,一旦对象键等于程序,就返回该元素,因为我想使用第二个输入字段(课程编号)进一步查询该元素。此步骤总是成功返回与程序输入相对应的正确程序课程。

第二步是事情变坏了。我现在要考虑该程序元素,并浏览该程序中所有课程的名称。我连接了两个输入字段,程序+“” +课程。该课程是一个专业课程,例如“ CSE”或“ IS”,课程是任何3位数字,例如“ 143”或“ 310”。程序中的每个对象元素都有一个字符串名称属性,例如“ CSE 143”。即使它们都是字符串类型且具有相同的值,但当我正在查看带有空格的程序时,此名称属性也不等于程序+“ + +课程。例如,我想找到课程“ IS 310”。我成功搜索了等于“ IS”的程序名称。我遍历键并使用此操作Object.keys(jsondata [index])==程序找到正确的元素值。 program是一个包含字符串“ I S”的变量。如前所述,这是成功的,但是如果我遍历该objectkey值的子项以找到id,例如programdata [index] .children == program +“” +课程,则它将无效。如果我改为对值programdata [index] .children ==“ I S 310”进行硬编码,那么它将起作用!这使我相信这两个变量的串联操作会更改字符串的编码。根据console.log,“ I S 310”和program +“” +课程的类型都是Strings,只是它们输出不同的encodeURIComponent()。

由于我的信誉不够好,我会写到控制台的输出是错误的:

步骤1

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));


输出:
自学考试
自学考试



program = "I S"
console.log(program)
console.log(encodeURIComponent(program));


输出:

I%C2%A0S



那些未编码的隐藏字符不会影响查找“ IS”程序提供的课程的第一步。现在,当我想在“ IS”程序中查找诸如“ IS 310”之类的特定课程时:

第2步

//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));


输出:
I S 310
I%C2%A0S%20310



第二步仅适用于没有空格(例如“ CSE”或“ MATH”)的程序。不适用于“ AA”或“ IS”。 data [i] .name是字符串类型,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

not equal

最佳答案

您的程序变量包含一个像空格但不是空格的字符。确保这不是编码问题,否则您可以使用此简单代码解决此问题。

encodeURIComponent(program.replace(/\u00a0/g, ' ') + ' ' + course)

07-25 22:04