两个字符串的比较

源字符串的形式可能有这么以下几种形式
1.good morning
2.It's a book
3.你好!
对应的返回值是
1.[{'str':'good','score':1},{'str':'morining','score':0}]
2.[{'str':'it','score':1},{'str':'is','score':1},{'str':'a','score':1},{'str':'book','score':1}]
3.[{'str':'Hello','score':1}]

想要根据返回的值来对源字符串进行一些标注 如果 score>=1 则标绿,score<=0则标红 有没有一些简单的算法。 如果是中文无法匹配的话不予处理。

阅读 2.5k
3 个回答

1.对返回值先做下处理,转换成对象:

var scoreMap = {
    good:1,
    morning: 1,
    // 等等
}

2.把源字符串拆分,遍历,获取颜色

var arr = 'good morning'.split(' ')
for(var i= 0; i < arr.length; i++) {
    console.log(scoreMap[arr[i]])
    if (scoreMap[arr[i]] > 1) {
        color = '绿色'
    } else {
        color = '红色'
    }
}

为什么morning的score 是0呢。
如果morning的score 是1的话,你这个logic 就是要实现一个把string 拆分成单词,再分别计数的功能。

我觉得对score<=0的单词修改颜色不难:

var data = [{'str':'good','score':1},{'str':'morining','score':0}];
data.forEach(function(word){
    word.color = word.score<=0?'red':'green';//只判断了<=0的情况
});

如果第三方的返回值中的str字段只是原字符串的分割,那也很好处理:

var srcStr = "good morning";
var key = srcStr.split(" ");//按空格分割
//遍历key数组,与处理后的返回值数组对应
for(let i = 0;i<key.length;i++){
    var word = data.filter(function(word){
        return word.str === key[i];
    });
    var color = word[0].color;//word是只有一个对象的数组
    (span元素).style.color = color;
}

但是,我看题目描述居然出现2种特殊情况:

  1. 原始数据good morning返回值[{'str':'good','score':1},{'str':'morining','score':0}],第二个是morining……
  2. '你好!'会返回hello,这个处理我不知道做映射的。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题