Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >1.判断两个数组是否“相等”2.取两个数组的交并差集

1.判断两个数组是否“相等”2.取两个数组的交并差集

作者头像
yuezhongbao
发布于 2019-03-13 07:32:33
发布于 2019-03-13 07:32:33
2.2K00
代码可运行
举报
文章被收录于专栏:前端实习日记前端实习日记
运行总次数:0
代码可运行

Set是ES6种新增的数据结构,有点类似与数组,但它的成员的值都是唯一的

1.取两个数组的交并差集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = [1,2,3,4];
var b = [3,4,5,6];

var set1 = new Set([...a,...b]);
var set2 = new Set(a.filter((item)=>{
    return b.indexOf(item) > -1
}));
var set3 = new Set(a.filter((item)=>{
    return b.indexOf(item) == -1
}))
console.log('并集:',set1);//Set{1,2,3,4,5,6}
console.log('交集:',set2);//Set{3,4}
console.log('差集:',set3);//Set{1,2}

2.判断两个数组是否“相等”

有两种方法

  • 1 JSON.stringify()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var a = ['1',2];
 var b = [1,2];
 console.log(JSON.stringify(a));//['1',2]
 console.log(JSON.stringify(b));//[1,2]
 console.log(JSON.stringify(a) == JSON.stringify(b));//false
  • 2 不允使用JSON.stringify时
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   Array.prototype.equals = function (arr) {
        if (!arr)
            return false;
        if (this.length != arr.length)
            return false;
        for (var i = 0, l = this.length; i < l; i++) {
            if (Array.isArray(this[i]) && Array.isArray(arr[i])) {
                this[i].equals(arr[i]);
            } 
            //else if(Object.prototype.toString.call(this[i])==='[object Object]' && Object.prototype.toString.call(arr[i])==='[object Object]') {
            //考虑到数组中包含对象,调用判断对象是否"相等"的方法,此方法不考虑数组中有对象的情况
            //}
            else {
                // console.log(this[i]);
                // console.log(arr[i]);
               if(this[i]!=arr[i]){
                   return false;
               }
            }
        }
        return true;
    }

注意 不要用 X.toString();

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var a = ['1',2];
 var b = [1,2];
 console.log(a.toString());//1,2
 console.log(b.toString());//1,2
 console.log(a.toString() == b.toString());//true

转换成字符串后,导致字符串'1'和数字1相等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
十个常用的工具函数​
ES6 的数组中提供了 flat 函数。这个函数是 Array.prototype 上的一个函数。而且可以指定要提取嵌套数组的结构深度,默认值为 1。
多云转晴
2019/10/23
1.1K0
前端面试被问到的js手写面试题汇总
类的继承在几年前是重点内容,有n种继承方式各有优劣,es6普及后越来越不重要,那么多种写法有点『回字有四样写法』的意思,如果还想深入理解的去看红宝书即可,我们目前只实现一种最理想的继承方式。
helloworld1024
2022/11/18
5890
关于JS那些事:数据类型判断方法的几种方法和判断是不是空数组或对象
在我们日常写代码的时候会有要判断数组或者对象类型的时候。 而JS也给了我们很多判断类型的方法,但还是有很多特殊情况导致我们的判断失误。 如下:
Healers
2022/04/24
1.8K0
js常用方法和一些封装(1)1.字符串相关2.数组相关
博主在js上已经花费了很长时间,不禁深深地被其轻巧而强大的功能,以及优雅灵活的写法所折服,一直没找到机会来总结一下,最近发现了简书这个不错的平台,正好把学习的东西做一个汇总。 题外话 我始终认为,学习编程最好的方式就是去写,甭管写的怎样,也要去练习。 当初学完了数组,我记得自己是先把里面的每一个方法都敲了一遍,然后反复思考,通过这些方法,我能够做些什么? 很多语法我一开始也是很不理解的,然而在不断地运用过程中,慢慢地就开始明白过来了。只要抓住一个大方向,然后不断地练,就一定能深入理解! 正如国外一个有名的数
剽悍一小兔
2018/05/17
1K0
腾讯前端手写面试题及答案
函数柯里化概念: 柯里化(Currying)是把接受多个参数的函数转变为接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。
helloworld1024
2022/12/19
6720
哪些 js 手写题是需要掌握的
普通的递归思路很容易理解,就是通过循环递归的方式,一项一项地去遍历,如果每一项还是一个数组,那么就继续往下遍历,利用递归程序的方法,来实现数组的每一项的连接:
helloworld1024
2022/10/10
1.9K0
Javascript数组操作
使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间;思虑下,堪能如此继续之?当狠心深学下方是正道。 一, 数组常用方法 1. 数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度 var arrayObj = new Array([element0[, element1
晚晴幽草轩轩主
2018/03/27
4K0
Javascript数组的常用方法和数据类型检测
数组常用的方法 数组的增加、修改、删除 数组的截取和拼接 数组转换为字符串 数组的排序和排列 新增方法 数组的增加、修改、删除 push:向数组的末尾增加新的内容 参数:一项或者多项 返回值:新增加后数组的长度 原数组:已经发生了改变 ary.push(10); //等效于 ary[ary.length] = 10; //等效于 ary.splice(ary.length, 0, 10); pop:删除数组最后一项的内容 参数:无 返回值:被删除的那一项的内容 原数组:已经发生了改变 ary.pop();
江米小枣
2020/06/15
6760
一文总结JavaScript手写面试题
该方法的参数是 Promise 实例数组, 然后其 then 注册的回调方法是数组中的某一个 Promise 的状态变为 fulfilled 的时候就执行. 因为 Promise 的状态只能改变一次, 那么我们只需要把 Promise.race 中产生的 Promise 对象的 resolve 方法, 注入到数组中的每一个 Promise 实例中的回调函数中即可.
helloworld1024
2022/11/07
3720
判断两个数组是否相似 (arraysSimilar)
请在 index.html 文件中,编写 arraysSimilar 函数,实现判断传入的两个数组是否相似。具体需求:
零式的天空
2022/03/22
6630
高级前端常考手写面试题合集5
方法有很多种,这里提供一种比较简洁的写法,用到了ES10的Object.fromEntries():
helloworld1024
2023/01/09
5080
面试常考手写代码学习技巧总结
我们在面试的时候,经常会被面试官问到几个手写代码的问题。手写一个数组去重复,深拷贝,数组拍平等等。有些小伙伴面试之前准备了,但是在编写的时候还是会忘掉,本文总结了一个如何应对手写代码的大纲,前面是一些基础内容,但是也希望能帮助到你,都会就当复习一遍,嘿嘿。
coder_koala
2020/01/17
1.1K0
JS的数据类型/判断方法/栈与堆/深浅拷贝
用来检测:undefined、string、number、boolean、symbol、object、function 无法检测引用类型里的Array
杨肆月
2019/08/20
1.5K0
JS的数据类型/判断方法/栈与堆/深浅拷贝
JavaScript高频面试题整理
作用域链 作用域就是程序执行到某一个特定部分时,可以访问这一部分的变量或者函数,这些变量或者函数就组成了一个特定的域,称为作用域。 程序执行会有一个环境栈,从全局环境开始,生成一个全局执行环境的关联对象,该对象拥有全局作用域的所有变量和方法。然后程序继续执行,遇到函数,也会生成该函数的一个关联的环境对象,并且将它压入栈中,此时会根据环境栈生成一个作用链,栈顶(作用域链顶端)也就是当时的函数执行环境对象,查找变量时就可以从作用域链顶端开始一直往后。 每一个执行环境都有一个作用域链,他可以访问作用
努力的Greatiga
2022/07/25
4290
这些js手写题你能回答上来几道
可以给img标签统一自定义属性data-src='default.png',当检测到图片出现在窗口之后再补充src属性,此时才会进行图片资源加载。
helloworld1024
2022/09/26
6030
2022前端面试遇到的手写题总结
下面来看一道比较典型的问题,通过这个问题来对比几种异步编程方法:红灯 3s 亮一次,绿灯 1s 亮一次,黄灯 2s 亮一次;如何让三个灯不断交替重复亮灯?
helloworld1024
2022/09/22
7280
判断是否为数组的 JavaScript 方法总结
我们在日常开发中,常常有判断某值类型的需求,今天我们总结一下常见的几种用来判断是否为数组的 JavaScript 方法。
编程三昧
2021/08/22
1.2K0
判断是否为数组的 JavaScript 方法总结
精学手撕系列——数组扁平化
在前端面试中,手写flat是非常基础的面试题,通常出现在笔试或者第一轮面试中,主要考察面试者基本的手写代码能力和JavaScript的基本功。
胡哥有话说
2020/11/03
9390
20道常被问到的JavaScript题目
可以给img标签统一自定义属性data-src='default.png',当检测到图片出现在窗口之后再补充src属性,此时才会进行图片资源加载。
helloworld1024
2022/09/26
4460
JavaScript中的类型判断
类型判断在 web 开发中有非常广泛的应用,简单的有判断数字还是字符串,进阶一点的有判断数组还是对象,再进阶一点的有判断日期、正则、错误类型,再再进阶一点还有比如判断 plainObject、空对象、Window 对象等等。
ConardLi
2019/05/23
1.3K0
推荐阅读
相关推荐
十个常用的工具函数​
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验