javascript - JS 字符串连接编码问题

标签 javascript json string concatenation encodeuricomponent

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

第二步是事情变坏的地方。我现在想获取该程序元素并查看该程序中所有类(class)的名称。我连接两个输入字段,program + ""+ course.该程序是一个专业,如“CSE”或“I S”,类(class)是任何 3 位数字,如“143”或“310”。程序中的每个对象元素都有一个字符串名称属性,如“CSE 143”。此名称属性不等于 program + ""+ course 即使它们都是字符串类型并且在我查看其中包含空格的程序时具有相同的值。例如,我想查找类(class)“I S 310”。我成功地搜索了等于“I S”的程序名称。我遍历键并使用此操作 Object.keys(jsondata[index]) == 程序找到正确的元素值。 program 是一个包含字符串“I S”的变量。如前所述,这是成功的,但如果我遍历该 objectkey 值的子项以查找 id,如 programdata[index].children == program + ""+ course,它不起作用。如果我改为对值进行硬编码,programdata[index].children == "I S 310",它就可以工作!这让我相信这两个变量的连接操作会改变字符串的编码。根据console.log,type of "I S 310"和program + ""+ course 都是String,只不过输出的是不同的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));

输出:
综合搜索引擎
全面搜索引擎


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

输出:
我是
我%C2%A0S


那些未编码的隐藏字符不会影响查找“I S”程序提供的类(class)的第一步。现在,当我想在“IS 310”等“IS”计划中查找特定类(class)时:

第二步

//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”= 类(class)][2]

pc = program + " " + course;
console.log(pc)
console.log(encodeURIComponent(pc));

输出:
我是 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))

输出:
198
A%20A%20198

A A 198
A%C2%A0A%20198

not equal

最佳答案

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

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

关于javascript - JS 字符串连接编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37628988/

相关文章:

javascript - 为什么我的 onClick 事件不起作用?

javascript - 使用 Razor 和 javascript 在新窗口中打开图像

javascript - 通过 JSON 传递给 JavaScript 之前在哪里声明 PHP?

json - Yesod 中的异常(exception)情况

arrays - 将类对象追加到数组 [Swift]

c++ - 降低字符串比较的时间复杂度

javascript - 这个网站是怎么做到的? (实时调整图像颜色)

javascript - onClick() 不会触发 React-Native App 中的函数

在 C 中创建编号文件

python - 将字符串(任意顺序)与大数组中的字符串进行匹配