js数组嵌套和数组去重的问题
来源:互联网 发布:ios股市行情软件下载 编辑:程序博客网 时间:2024/04/30 09:15
去除嵌套的思路:
用递归、reduce()、concat()来实现。
递归解决多层嵌套,reduce()解决每层数组的迭代拼接,concat()来拼接数组即拆除一层嵌套。
let sum = [0, 1, 2, 3].reduce(function(acc, val) { //数组_实现flatten()函数,拆嵌套 return acc + val;}, 0);console.log(sum);// 6let list1 = [[0, 1], [2, 3], [4, 5]];let list2 = [0, [1, [2, [3, [4, [5, [6]]]]]]];const flatten = (arr) => { return arr.reduce( (acc, val) => { return acc.concat(Array.isArray(val) ? flatten(val) : val) }, [] );};c(flatten(list1));// [0, 1, 2, 3, 4, 5]c(flatten(list2));// [ 0, 1, 2, 3, 4, 5, 6 ]
数组去重的思路:
1.创建一个新的数组存放结果2.创建一个空对象
3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。代码如下:
Array.prototype.unique3 = function(){var res = [];var json = {};for(var i = 0; i < this.length; i++){if(!json[this[i]]){res.push(this[i]);json[this[i]] = 1;}}return res;}var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];alert(arr.unique3());
更简短的数组去重代码:
利用filter()和indexOf()方法实现数组去重:
var arr = [1, 3, 2, 5, 2, 1, 4, 2, 1];arr = arr.filter(function(item,index,array){ return array.indexOf(item) === index; });c(arr);
数组去除嵌套再去重:
function unite(arr1, arr2, arr3) { //数组拆嵌套再去重 for(var i=1;i<arguments.length;i++) { arr1.push(arguments[i]); } const flatten = (arr) => { return arr.reduce( function(acc,val) { return acc.concat(Array.isArray(val) ? flatten(val) : val); },[]); }; arr1 = flatten(arr1); // var obj = {}; // var array = []; function unique(array1){ return array1 = array1.filter(function(item,index,array){ return array1.indexOf(item) === index; }); } arr1 = unique(arr1); return arr1;}c(unite([1, 3, 2], [5, 2, 1, 4], [2, 1]));
0 0
- js数组嵌套和数组去重的问题
- js数组去重问题
- js数组的去重和排序
- 数组的去重问题
- JS 数组去重
- js数组去重
- js 数组去重
- js 数组去重
- js数组去重
- js 数组去重
- js数组去重
- JS 数组去重
- //js数组去重
- js-数组去重
- js数组去重
- js 数组去重
- js数组去重
- JS 数组去重
- Tomcat配置文件server.xml详解
- redis安装error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such f
- 用 C# 做人脸检测(基于EmguCV)
- Android 设置Button为透明色
- Object-Oriented Analysis and Design Using UML 翻译与学习 (十六)
- js数组嵌套和数组去重的问题
- selenium 添加事件
- Linux中的粘滞位的作用
- Linux设备模型分析之kset
- js的默认行为
- Linux常用命令
- java编程题:100个线程同时向一个银行账户中存入1元钱
- solr-6.4.2在os x的安装
- 几种移动控制