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
原创粉丝点击