用js求字符串交集和字符串相减结果
有时候我们可能会求两个字符串的交集,也就是找到两个字符串里面相同的元素,偶尔也会需要把一个字符串里的与另外的一个字符串重合的元素给删除掉,所以诞生了这篇文章。下面给出案例:
已知有a,b两个字符串,字符串都是由多个词语组成且中间有空格隔开,想要知道a,b字符串有哪些词语相同,并且把其中a字符串内a&b同时存在(即交集)的词语给删除掉,得到一个新的字符串。
解题思路:
1.先把字符串使用split()函数转变成数组
2.再使用filter()函数求得交集
3.使用splice()函数删除双重循环下相同的词语元素
4.把交集和结果集输出到页面上
先看效果图:
核心代码如下:
<script>
// js如何获取textarea框中的值
// textareaElement的value属性行,而innerHTML属性不行
function trans() {
//通过id获取dom对象
var textarea_source = document.getElementById('textarea_source');
var textarea_translate = document.getElementById('textarea_translate');
var textarea_jiao = document.getElementById('textarea_jiao');
var textarea_result = document.getElementById('textarea_result');
//获取dom对象的字符串
var textSourse = textarea_source.value;
var textfocus = textarea_translate.value;
//以空格分割字符串转变为a,b数组
var a = textSourse.split(" ");
var b = textfocus.split(" ");
//求得a,b两个数组的交集
var jiao = a.filter((val) => new Set(b).has(val));
//判断是否需要继续运行下去,如果没有交集,终止程序
if (jiao.length==0){
//弹框提示
alert('不存在交集,字符串无法相减')
//终止程序
return;
}
//输出交集
textarea_jiao.innerHTML = jiao.join(' ');
//字符串减法运算得到结果字符串数组
var result_string = arrChange(a, b);
//转换数组为字符串且替换非空字符输出结果集
textarea_result.value = result_string.join(' ').replace(/\s+/g, ' ');
//去重
quchongstr();
}
/*数组相减的方法*/
function arrChange(a, b) {
for (var i = 0; i < b.length; i++) {
for (var j = 0; j < a.length; j++) {
if (a[j] == b[i]) {//如果是id相同的,那么a[ j ].id == b[ i ].id
a.splice(j, 1);
j = j - 1;
}
}
}
return a;
}
//去重的方法
function quchongstr() {
//通过id获取dom对象
var textarea_translate = document.getElementById('textarea_result');
//得到具体值
var str = textarea_translate.value;
//转换为数组
var a = str.match(/\S+/g);//等价于str.split(/\s+/g)// \s空白符,\S非空白符
//排序
a.sort();
//双重循环进行去重
for (var i = a.length - 1; i > 0; i--) {
if (a[i] == a[i - 1]) {
a.splice(i, 1);
}
}
console.log('去重成功!');
//数组转换成字符串
var finalstr = a.join(" ");
//输出字符串到页面上
textarea_translate.value = finalstr;
}
</script>
注释得十分详细,请直接看注释,下面是html代码:
<!DOCTYPE html>
<html lang="cn">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>字符串求交集和相减的结果集-字符串工具集</title>
<!-- Bootstrap -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
<!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
<!--[if lt IE 9]>
<script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
<![endif]-->
<meta charset="UTF-8">
<style>
.my_title {
/*width: 200px;*/
margin: 50px 400px;
font-size: 50px;
text-align: center;
}
.my_part {
margin: 35px;
}
h2 {
text-align: center;
font-size: 50px;
font-weight: bold;
font-family: 幼圆;
margin: 50px 200px;
}
.my_content {
margin: 20px;
text-align: center;
}
</style>
</head>
<body>
<article class="my_title">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">字符串工具集 2020年8月16日</h3>
</div>
<div class="panel-body">
<h2>字符串求交集和相减的结果集</h2>
<p class="lead" style='text-align: left;'>
已知有a,b两个字符串,字符串都是由多个词语组成且中间有空格隔开,想要知道a,b字符串有哪些词语相同,并且把其中a字符串内a&b同时存在(即交集)的词语给删除掉,得到一个新的字符串。</p>
<p class="lead" style="text-align: left;">
解题思路:<br>1.先把字符串使用split()函数转变成数组<br>2.再使用filter()函数求得交集<br>3.使用splice()函数删除双重循环下相同的词语元素<br>4.把交集和结果集输出到页面上
</p>
</div>
</div>
</article>
<article class="my_part">
<div class="my_content">
<div style="display: inline-block;">
<textarea name="my_source" id="textarea_source" placeholder="请输入被减字符串 a:" cols="120"
rows="15"></textarea>
</div>
<div style="display: inline-block;">
<textarea name="my_tanslate" id="textarea_translate" placeholder="请输入减字符串 b:" cols="120"
rows="15"></textarea>
</div>
<div style="display: inline-block;">
<textarea name="my_tanslate" id="textarea_jiao" placeholder="交集输出~" cols="120" rows="15"></textarea>
</div>
<div style="display: inline-block;">
<textarea name="my_tanslate" id="textarea_result" placeholder="结果集输出~" cols="120" rows="15"></textarea>
</div>
<br>
<button type="button" class="btn btn-primary" id="myButton4" data-complete-text="Loading finished"
onclick="trans()">请点击我
</button>
<br>
</div>
</article>
</body>
【核心代码放置处】
</html>
需要使用请直接把核心代码替换html里面的末尾**【核心代码放置处】**既可