如何求两个字符串的交集? 用js求字符串交集和字符串相减结果

本文介绍如何使用JavaScript求两个字符串的交集并从一个字符串中删除交集部分。通过将字符串转为数组,使用split(), filter(), 和 splice()函数,实现了这一功能。文章提供了详细的解题思路及核心代码示例。" 120839885,8754438,CAD二次开发:自定义下拉菜单与工具栏实践与技巧,"['CAD开发', 'c#', 'CAD界面定制']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用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里面的末尾**【核心代码放置处】**既可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值