用js实现对比填空题答案的最佳方法

比如说填空题:《<论语>六则》中阐述学习与思考辩证关系的句子是:,思而不学则殆。出自本文中的成语有:温故知新,,学而不厌。

填空题的答案是:《<论语>六则》中阐述学习与思考辩证关系的句子是:学而不思则罔,思而不学则殆。出自本文中的成语有:温故知新,不耻下问,学而不厌,诲人不倦,三人行必有我师。

如果要将以上两个答案“学而不思则罔”、“不耻下问”对比出来,用JS语言来实现,有些什么好办法来实现啊?

阅读 3.8k
2 个回答

看到没人回答,那我抛砖引玉一下,写了一个大概的方法,没仔细测试,应该还有缺陷。

var a = "《<论语>六则》中阐述学习与思考辩证关系的句子是:,思而不学则殆。出自本文中的成语有:温故知新,,学而不厌。";
var b = "《<论语>六则》中阐述学习与思考辩证关系的句子是:学而不思则罔,思而不学则殆。出自本文中的成语有:温故知新,不耻下问,学而不厌,诲人不倦,三人行必有我师。";

/*
* 字符串转换成数组
* 把所有标点符号替换成一个符号
* 根据这个符号分开成为数组
* */
function transArr(str) {
    //中文标点正则
    var reg = /[\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5]/g;
    str = str.replace(reg, ',').split(",").filter(function (s) {
        return s && s.trim();//去掉空元素
    });
    return str;
}
/*
* arr1:填空数组
* arr2:答案数组
* 循环填空数组,将答案数组中存在的删除掉,最终剩余的是需要填写的答案
* */
function getDiff(arr1,arr2){
    if(arr1.length ===0 )return arr2;//填空数组为空时,说明答案数组就是所有区别
    for(let val of arr1){
        if(arr2.indexOf(val)!==-1){
            arr2.splice(arr2.indexOf(val),1)
        }
    }
    return arr2;
}

getDiff(transArr(a),transArr(b));

将就着看看呢,应该还有更好的办法。

var a = '《<论语>六则》中阐述学习与思考辩证关系的句子是:,思而不学则殆。出自本文中的成语有:温故知新,,学而不厌。'
var b = '《<论语>六则》中阐述学习与思考辩证关系的句子是:学而不思则罔,思而不学则殆。出自本文中的成语有:温故知新,不耻下问,学而不厌,诲人不倦,三人行必有我师。'
var reg = new RegExp(a.split('').join('(.*?)'))
var result = b.match(reg)
console.log(result) // result这个数组里应该能筛选出你要的东西
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题