去除嵌套的思路:
用递归、reduce()、concat()来实现。
递归解决多层嵌套,reduce()解决每层数组的迭代拼接,concat()来拼接数组即拆除一层嵌套。
let sum = [0, 1, 2, 3].reduce(function(acc, val) { //数组_实现flatten()函数,拆嵌套
return acc + val;
}, 0);
console.log(sum);
// 6
let 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 {
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]));