千家信息网

解数组去重和数组扁平化的方法有哪些

发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,这篇文章主要介绍"解数组去重和数组扁平化的方法有哪些",在日常操作中,相信很多人在解数组去重和数组扁平化的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"解数组
千家信息网最后更新 2025年01月30日解数组去重和数组扁平化的方法有哪些

这篇文章主要介绍"解数组去重和数组扁平化的方法有哪些",在日常操作中,相信很多人在解数组去重和数组扁平化的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"解数组去重和数组扁平化的方法有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

数组去重

数组去重在面试中是一道基础题,但仍然可以在其中挖掘许多js知识。

ES6 最常用Set 去重

Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。

function unique(arr) {     return Array.from(new Set(arr)) } let arr = [1, 1, 'true', 'true', true, true, 15, 15]; console.log(unique(arr))// [ 1, 'true', true, 15 ]  let unique2 = arr => [...new Set(arr)]  console.log(unique2(arr));// [ 1, 'true', true, 15 ]

双重for循环

外层循环元素,内层循环时比较值。

function unique(arr) {     for (var i = 0; i < arr.length; i++) {         for (var j = i + 1; j < arr.length; j++) {             if (arr[i] == arr[j]) {         //第一个等同于第二个,splice方法删除第二个                 arr.splice(j, 1);                 j--;             }         }     }     return arr; } let arr = [1, 1, 'true', 'true', true, true, 15, 15]; console.log(unique(arr))// [ 1, 'true', true, 15 ]

indexOf或includes去重

当数组内没有该元素时,indexOf返回-1,则把它push进新数组。

function unique(arr) {     var array = [];     for (var i = 0; i < arr.length; i++) {         if (array .indexOf(arr[i]) === -1) {             array .push(arr[i])         }     }     return array; }

includes() 方法用于判断字符串是否包含指定的子字符串。如果找到匹配的字符串则返回 true,否则返回 false。

function unique(arr) {     var array = [];     for (var i = 0; i < arr.length; i++) {         if (!array.includes( arr[i]) ) {             array .push(arr[i])         }     }     return array; }

filter去重

原始数组中元素的索引等于当前索引值时返回,否则返回当前元素

function unique(arr) {     var res = arr.filter(function(item, index, array) {         return array.indexOf(item) === index     })     return res }

数组扁平化

数组扁平化是指将一个多维数组变为一维数组。

flat方法

flat()方法创建一个新数组,其中所有子数组元素都以递归方式连接到该数组中,直到达到指定的深度为止

const arr1 = [1, 2, [3, 4, [5, 6]]]; arr1.flat(2); // [1, 2, 3, 4, 5, 6]  const arr2 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]]; arr2.flat(Infinity); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ES6 拓展运算符

es6的扩展运算符能将二维数组变为一维,若arr中含有数组则使用一次扩展运算符,直至没有为止。

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

toString方法+split方法

调用数组的toString方法,将数组变为字符串然后再用split分割还原为数组。split分割后形成的数组的每一项值为字符串,所以需要用一个map方法遍历数组将其每一项转换为数值型。

function flatten(arr) {     console.log(arr.toString());// 1,2,3,4,5,6     console.log(arr.toString().split(',')); //[ '1', '2', '3', '4', '5', '6' ]     return arr.toString().split(',').map(function(item) {         return Number(item);     }) }  let ary = [1, [2, [3, [4, 5]]], 6]; console.log(flatten(ary)); // [ 1, 2, 3, 4, 5, 6 ]

使用join方法可以实现和toString方法类似的效果。

递归

递归的遍历每一项,当为数组时则继续,不为数组则concat。

function flatten(arr) {     var result = [];     for (var i = 0, len = arr.length; i < len; i++) {         if (Array.isArray(arr[i])) {             result = result.concat(flatten(arr[i]))         }         else {             result.push(arr[i])         }     }     return result; }

reduce方法实现

reduce方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

function flatten(arr) {       return arr.reduce((result, item)=> {         return result.concat(Array.isArray(item) ? flatten(item) : item);     }, []); } let ary = [1, [2, [3, [4, 5]]], 6]; console.log(flatten(ary)); // [ 1, 2, 3, 4, 5, 6 ]

到此,关于"解数组去重和数组扁平化的方法有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数组 方法 元素 扁平 字符 字符串 学习 运算符 递归 循环 运算 更多 知识 索引 一维 帮助 原始 实用 接下来 一道 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库关系运算符号的由来 免费数据库备份软件 余姚计算机软件开发教程 网络安全攻防两天可以学会不 魔兽世界永远60级服务器 浅谈软件开发过程质量控制要点 游戏服务器经常连接不上 兼职网络安全防范 云南欣网互联网络科技怎么样 华能集团网络安全研究实验室 有关时间分配的调查数据库 云服务器部署网心云 成都软件开发17k什么水平 金银湖国际网络安全会址 数据库集群技术教程 南瑞网络安全设备 仓储生鲜软件开发 宿城区自动化网络技术诚信合作 服务器tps一般多少正常 常州hpe机架式服务器哪家好 网易云音乐api接口数据库 网络安全手抄报小学三年级 身份证数据库采集后多长时间更新 数据库开发认证 富优网络技术有限公司 高级软件开发书籍 泉州网络安全宣传周2019 广东自主可控软件开发批发价 云服务器部署网心云 济南软件开发java招聘
0