最近发现一道面试题,用JS实现一个数组合并的方法(要求去重)。我们知道,concat方法会合并两个数组并返回一个新的数组,新的数组会包含旧数组中的每一个元素,即[1,2,3]与[2,3,4]合并后的结果为[1,2,3,2,3,4]。那么该如何实现,既能合并又能去重?
思路就是,将目标数组的值作为key放进一个对象中,在这个过程中,重复的值就被过滤掉了,这样就排除了重复的值。
两个数组,a = [1,2,3], b = [2,3,4],要求合并后的数组为[1,2,3,4]
Array.prototype.unique = function(){ var a = {}; for(var i = 0; i < this.length; i++){ if(typeof a[this[i]] == "undefined") a[this[i]] = 1; } this.length = 0; for(var i in a) this[this.length] = i; return this; } var a = [1,2,3]; var b = [2,3,4]; var c = a.concat(b).unique();
两个数组,a = [1,2,3], b = [2,3,4],要求合并后的数组为[1,4]
Array.prototype.unique2 = function(){ var a = {}, b = {}, n = this.length; for(var i = 0; i < n; i++){ if(typeof(b[this[i]]) != "undefined") continue; if(typeof(a[this[i]]) == "undefined"){ a[this[i]] = 1; }else{ b[this[i]] = 1; delete a[this[i]]; } } this.length = 0; for(var i in a) this[this.length] = i; return this; } var a = [1,2,3,4]; var b = [2,3,5,7]; var d = a.concat(b).unique2();
参考链接: http://www.jb51.net/article/21916.htm
http://bbs.csdn.net/topics/190040118
时间: 2024-08-10 06:40:46