一、数组去重(1)indexOf()
function only(arr){var res=[];arr.forEach(function(item){if(res.indexOf(item)==-1){res.push(item);}})return res;
}

(2)Set结构

var set=new Set(arr);
Array.from(set);

(3)filter过滤

function only(arr){var res=[];res=arr.filter(function(item,index,self){if(self.indexOf(item)==index){return item;}})return res;
}

(4)reduce()

function only(arr){var res=[];return arr.reduce((pre,cur)=>{if(!pre.includes(cur)){return pre.concat(cur);}else{return pre;}},[])
}

(5)lastIndexOf() 

function only(arr){var res=[];arr.forEach(function(item){if(arr.indexOf(item)==arr.lastIndexOf(item)){res.push(item);}})return res;
}    

二、数组扁平化处理可以用reduce例:实现一个flatten方法,使得输入一个数组,该数组里面的元素也可以是数组,该方法会输出一个扁平化的数组。arr=[[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10]; console.log([1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10]);

(1)递归
function flatter(arr){var res=[];arr.map(function(item){if(Array.isArray(item)){res=res.concat(flatter2(item));}else{res.push(item);}})return res;
}

(2)reduce()

function flatten(arr){return arr.reduce(function(pre,item){return pre.concat(Array.isArray(item)?flatten(item):item);},[]);
}

(3)toString()+spilt()+ParseInt()

 调用数组的toString()方法,将数组变成字符串,然后再用split()分割还原成数组

function flatten(arr){return arr.toString().split(',').map(function(item){return parseInt(item);})
}function flatten(arr){return arr.join(',').split(',').map(function(item){return parseInt(item);})// 用join()方法也可以转成字符串
}

缺点:只适用于数组元素均为数字的情况。

(4)扩展运算符

ES6的扩展运算符能将二维数组变为一维。

[ ].concat(...[1,2,3,[4,5]])——>[1,2,3,4,5]

arr.some()只要有一个符合条件就返回true,所以循环遍历判断元素是否包含数组,如果有就使用一次扩展运算符。

function flatten(arr) {while(arr.some(item=>Array.isArray(item))) {arr = [].concat(...arr);}return arr;
}

转载于:https://www.cnblogs.com/xiaoan0705/p/11263278.html

数组去重与数组扁平化相关推荐

  1. 数组去重以及数组对象去重方法总结

    数组去重以及数组对象去重方法总结 一.数组对象去重 1.reduce方法 2.利用原生js+空对象+空数组 3.利用原生js+标志位+空数组 4.利用双指针思想+splice方法 二.数组去重 1.利 ...

  2. vue数组去重,数组对象去重

    1:数组去重 1:数据格式 list:[ a:"aaa", b:"bbb", c:"ccc", d:"ddd", a:& ...

  3. php 数组去重_数组去重(JavaScript 为例)

    数组去重,就是在数组中查找相同的元素,保留其中一个,去除其他元素的程. 从这句话揭示了数组去重的两个关键因素: 找到重复项 去除重复项 本文告诉你在遇到去重问题时该如何思考,并以 JavaScript ...

  4. java数组去重_数组去重12种方案-你要的全在这

    首先我们先温习一下数组的常用的方法 pop push shift unshift slice splice sort reverse concat join indexOf lastIndexOf m ...

  5. es6 数组去重,数组里面的对象去重

    // 数组去重 {const arr = [1,2,3,4,1,23,5,2,3,5,6,7,8,undefined,null,null,undefined,true,false,true,'中文', ...

  6. 数组去重——将数组中重复的元素去掉

    一.核心算法 1.创建一个新的空数组,拿旧数组与新数组比较,即遍历旧数组,如果新数组中没有这个元素,就把这个元素添加到新数组中. 2.输出新数组. 二.完整代码 <!DOCTYPE html&g ...

  7. 二维数组去重,数组对象去重

    二维数组去重 使用对象的key不能重复原则,对数组进行去重 var arr = [[1, 1, 2], [1, 2, 1], [1, 1, 2], [1, 2, 3]] var obj = {} ar ...

  8. js最简单数组去重_js数组去重最常用的5种方法

    今天来聊一聊js数组去重的一些方法,包括一些网上看到的和自己总结的,总共5种方法,希望对大家有帮助. 第一种:遍历数组法 这种方法最简单最直观,也最容易理解,代码如下: 这种方法很好理解,利用了ind ...

  9. es6 数组去重_JS数组去重的9种方法(包括去重NaN和复杂数组类型)

    其实网上已经有很多js数组的去重方法,但是我看了很多篇并自己通过代码验证,发现都有一些缺陷,于是在研究多篇代码之后,自己总结了9种方法,如果有哪里不对请及时纠正我哈~ 测试代码 let arr1 = ...

最新文章

  1. 优雅的理解 call 和 apply 的使用方法
  2. python pytorch自定义_PyTorch使用自定义模块创建数据模型
  3. 前端学习(523):双飞翼布局
  4. Oracle循环语句
  5. [leetcode]240. 搜索二维矩阵 II
  6. C#基础学习第一天(.net菜鸟的成长之路-零基础到精通)
  7. 【web前端】JavaScript闭包
  8. 传智播客杨中科老师的wpf基础视频教程、C#视频教程
  9. 【Qt学习之路】我的Qt历程
  10. 校园客户端linux创翼,电信创翼校园客户端-电信创翼校园网客户端下载 4.7.9.589 官方版 - 河东下载站...
  11. matlab的做潮流计算,Matlab实现潮流计算程序
  12. matlab已知热敏电阻数据,Matlab在热敏电阻特性测量实验中的应用
  13. Intel出品开源图片标注工具CVAT在Ubuntu18.04上部署
  14. 网页通用的测试用例(出处:: 51Testing-- lxp1119216)
  15. java 穷举_java循环穷举
  16. 团队协作软件之confluence和jira的配套使用
  17. 360在网站安全防护中的实践
  18. 机器学习笔记~图像的空间分辨率
  19. 英语单词记忆 词源法-思维导图(09)词源bar/bal/ban-41
  20. 云计算、大数据和人工智能三者到底什么关系

热门文章

  1. Redis的常用命令——hash的常用命令
  2. c语言案例——输入一个字符串,将其逆序输出
  3. Python+selenium 自动化-mac下安装配置chrome驱动方法
  4. 对Keil在线烧录程序弹出“The firmware of the connected J-Link[SN:xxxxxxxx] does not support......的问题解决
  5. 第八周项目实践1 建立顺序串的算法库
  6. [YTU]_2390( 抽象一个形状类)
  7. MATLAB图像函数以及应用(第六章)边界问题
  8. 微信和支付宝中的一些常用方法封装
  9. 机器学习之过拟合与欠拟合以及偏差-方差分解
  10. CodeForces-985C Liebig's Barrels