首页 > 其他分享 >7种数组去重方法

7种数组去重方法

时间:2022-10-29 18:37:43浏览次数:63  
标签:arr return log newArr 数组 console 方法

一、设定原数组

 const arr = [22, 22, 'ture', 'ture', false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', 15, 15, true, true, {}, {}]  console.log('原数组', arr);

二、去重方法

1.ES6的set去重  Array.from(new Set(数组)) ,无法去空对象{},可以去NaN

        function unique() {             return Array.from(new Set(arr))         }         console.log('set去重', unique());

2.双重循环嵌套,使用spilce,无法去空对象{}和NaN

        function unique1(arr) {             for (let i = 0; i < arr.length; i++) {                 for (let j = i + 1; j < arr.length; j++) {                     if (arr[i] === arr[j]) {                         arr.splice(j, 1)                         j--                     }                 }             }             return arr         }         console.log('双重循环splice去重', unique1(arr));

3.indexOf去重,无法去{}和NaN

        function unique2(arr) {             if (!Array.isArray(arr)) {                 return console.log('传入的不是数组');             }             let newArr = []             for (let i = 0; i < arr.length; i++) {                 if (newArr.indexOf(arr[i] === -1))//如果newArr数组中没有,则添加                 {                     newArr.push(arr[i])                 }             }             return newArr         }         console.log('indexOf去重', unique2(arr));

4.利用sort()去重,无法去重{}对象,NaN,undefined消失

        function unique3(arr) {             if (!Array.isArray(arr)) {                 return console.log('传入的不是数组');             }             arr = arr.sort()             let newArr = [arr[0]]             for (let i = 1; i < arr.length; i++) {                 if (arr[i] !== arr[i + 1]) {                     newArr.push(arr[i])                 }             }             return newArr         }         console.log('sort去重', unique3(arr));

5.利用includes,即数组是否包含该值,无法去{}对象,但可以去NaN

        function unique4(arr) {             if (!Array.isArray(arr)) {                 return console.log('传入的不是数组');             }             let newArr = []             for (let i = 0; i < arr.length; i++) {                 if (!newArr.includes(arr[i])) {                     newArr.push(arr[i])                 }             }             return newArr         }         console.log('includes去重', unique4(arr));

6.hasOwnProperty,检测对象是否包含某个值,可全部去重

        function unique5(arr) {             let obj = {}             function f1(item, index, arr) {                 return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)             }             return arr.filter(f1)         }         console.log('对象的hasOwnProperty去重', unique5(arr));

7.利用filter+indexOf,无法去重{},NaN消失

        function unique6(arr) {             if (!Array.isArray(arr)) {                 return '传入的不是数组'             }             //利用filter返回一个新的数组,新数组的元素为符合函数标准的元素,需要return             return arr.filter(function (item, index, arr) {                 //从数组的第0位开始查找目标元素,如果与当前索引值相同,即为不重复,返回该值于新数组中                 return arr.indexOf(item, 0) === index             })         }         console.log('filter+indexOf去重', unique6(arr));

标签:arr,return,log,newArr,数组,console,方法
From: https://www.cnblogs.com/jackdongdong/p/16839346.html

相关文章

  • 宝塔面板出现“require(): open_basedir restriction in effect. ”的解决方法
    宝塔面板出现“require():open_basedirrestrictionineffect.”的解决方法1、只需要在相应的网站目录,勾选掉防跨站攻击(open_basedir)即可!2、必须重启Php......
  • Shell脚本之数组
    概念数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。......
  • Python 自由方法使用说明
     #自由方法只能通过类对象来调用,如果用实例对象调用,传入的第一个参数就是实例对象本身classtest(object):old="类变量,外部可访问。"#自由方法def......
  • js 字符串中包含逗号和分号分析成数组
    varstr="117.39755436808615,34.59211450864094;117.39783481906638,34.59185738594207;117.39825396841732,34.59151467824745;117.39895365857903,34.5909999082......
  • Shell脚本之数组排序
    数组排序(使用tr、sort、for)操作步骤;使用tr命令将数组内每个元素之间的空格替换为换行符;之后使用sort命令按从小到大重新排序;最后使用for循环遍历排序后的元素值。......
  • js 数组-过滤数据
    js数组-过滤数据filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。注意:filter()不会对空数组进行检测。注意:filter()不会改......
  • 关于bat批处理脚本中大于-小于-不等于的表示方法
    在批处理中>和<为重定向符号,这就意味着我们不能用>来表示大于,<表示小于,不过笔者试了一下,可以用==表示等于也就意味着不能用>=、<=、<>来表示大于等于、小于等于、不等于,还......
  • TypeScript日期工具: date-fns日期工具的使用方法
    1、引入$npminstall--savedate-fns2、使用import{isToday,isYesterday,isTomorrow,format,addYears,addMonths,addDays,addHours,add......
  • String常用方法!
    1.length();返回字符串的长度2.charAt(intindex);返回某个位置的字符3.contains(Stringstr);判断是否包含某个字符串4.toCharArray();返回字符串对应的数组*5.indexOf(......
  • 使用delegate给方法传递参数,或返回delegate对象
    第一次在博客园写文章。最近遇到一个问题,用到了多线程,以前用的时候线程启动时不需要传递参数,可现在需要时却被难了一把。。还是先说说delegate吧delegate是C#中的一种......