JS数组问题

143 阅读2分钟

数组去重

方式一:通过Set实现

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

	function unique(arr) {
	    return Array.from(new Set(arr));
	}

方法二:通过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;
	}

方法三:通过includes实现

	function unique(arr) {
	    var array =[];
	    for(var i = 0; i < arr.length; i++) {
	            if( !array.includes( arr[i]) ) {   // 也可以用array.indexOf(arr[i]) === -1,原理一样
	                 array.push(arr[i]);
	            }
	    }
	    return array;
	}

找出数组中的重复项

方法一:

	function duplicates(arr) {
	  //声明两个数组,a数组用来存放结果,b数组用来存放arr中每个元素的个数
	     var a = [],res = [];
	  //遍历arr,如果以arr中元素为下标的的b元素存在,则该b元素加1,否则设置为1
	     for(var i = 0; i < arr.length; i++){
	         if(!a[arr[i]]){
	             a[arr[i]] = 1;
	             continue;
	         }
	         a[arr[i]]++;
	     }
	     //遍历b数组,将其中元素值大于1的元素下标存入a数组中
	     for(var i = 0; i < a.length; i++){
	         if(a[i] > 1){
	             res.push(i);
	         }
	     }
	     return res;
	}

方法二:

       function duplicates(arr) {
            var a = [];
            for (var i = 0; i < arr.length - 1; i++) {
                for (var j = i + 1; j < arr.length; j++) {
                    if (arr[i] == arr[j] && a.indexOf(arr[i]) == -1) {
                        a.push(arr[i]);
                    }
                }
            }
            return a.sort();
        }

扁平化数组

方法一:递归调用

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

方法二:flat方法

	arr.flat(n)  //其中n为数组维度
	// 若不管数组的维度是多少,都转换成一维数组,参数可以为Infinity

方法三:ES6扩展运算符

	function flatten(arr) {
		// some方法满足条件返回true,用于判断数组中是否还存在数组
	    while (arr.some(item => Array.isArray(item))) {
	        arr = [].concat(...arr);
	    } 
	    return arr;
	}

方法四:正则替换

	let str = JSON.stringify(arr);
	str = str.replace(/(\[|\])/g, '');
	str = '[' + str + ']';
	arr = JSON.parse(str);

方法五:reduce

	function flatten(arr) {
	    return arr.reduce((res, cur) => {
	        return res.concat(Array.isArray(cur)?flatten(cur):cur);
	    }, []);
	}