用JS实现一个数组合并的方法(要求去重)

最近发现一道面试题,用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

用JS实现一个数组合并的方法(要求去重)的相关文章

js 求一个数组元素的最小公倍数

今天我在网上查 "js 求一个数组元素的最小公倍数",不管是Google还是百度,查出来的答案竟然都是一样的,最关键的是这是错误的. 错误在哪那!刚一看感觉是正确的,而且你输入几个不同的数组,输出的是正确的,but,当我输入[2,3,4]的时候竟然是24,这就很明显不对了,还有输入[0,1]的时候输出的是1, 我发现了这两点不对.好了贴一下我自己的代码. var lcm = function () { // TODO: Program me var m=0; for(var i=0;i

js数组合并(一个数组添加到另一个数组里面)方法

js定义两个数组. var arrA=[1,2,3]; var arrB=[4,5,6]; 要实现[1,2,3,4,5,6],如果直接arrA.push(arrB); 则arrB只会作为了arrA的一个元素.执行如图: 要合并或连接,则需要使用concat() 方法. concat(Array) 方法 concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本.array1.concat([item1[, item2[, . . . [, itemN

js中实现数组的indexOf方法

时间过得很快,转行做开发整一年了,打算出去见见世面.看我现在技术水平能达到什么层次,好确定以后的学习方向,也看看外面的公司都在使用一些什么样的技术. 昨天面了一家公司,对方直接让我答的压轴题.一个简单的算法设计题:熟悉js的同学知道js中字符串有个indexOf方法,现在需要实现数组的indexOf方法.由于本科并非计算机专业,编程方面的一些基本功还很不扎实(比如基础算法掌握程度.算法设计能力),昨天没把题目做对.今天赶紧写出来,以免以后遇上还得再去想.罗里吧嗦一顿,上代码吧还是: 1 Arra

从js的repeat方法谈js字符串与数组的扩展方法

js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { return (new Array(n + 1)).join(target); } //版本2:之所以要创建一个带length属性的对象 是因为要调用数据的原型方法,需要指定call的第一个参数为类数组对象 //类数组对象的必要条件是其length属性的值为非负数 function repeat(t

js中的数组对象排序(方法sort()详细介绍)

定义和用法 sort() 方法用于对数组的元素进行排序. 语法    arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意,数组在原数组上进行排序,不生成副本. 普通数组排序: js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数.如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序.如: 字母A.B的ASCII值分别为65.66,而a.b的值分别为97.98,所

关于js中操作数组的一些方法

1.锁定数组的长度(让数组的长度变成只读). var a = [1,2,3] //定义一个数组 Object.defineProperty(a,"length",{ writable:false }) //将a数组的长度属性设为只读 a.length = 0 //将a的长度改为0 console.log(a.length); //打印a数组的长度,还是3 2.Array.join()方法,返回一个字符串 var a = [1,2,3]; var b = a.join("&qu

js高级程序设计数组的一些方法

数组的栈方法: 栈是一种 LIFO(Last-In-First-Out, 后进先出)的数据结构,也就是最新添加的项最早被移除. 而栈中项的插入(叫做推入)和移除(叫做 弹出),只发生在一个位置--栈的顶部. ECMAScript 为数组专门提供了 push()和 pop()方法,以便 实现类似栈的行为. var colors = new Array(); // 创建一个数组 var count = colors.push("red", "green"); // 推入

JS(TS)中数组常见的方法(未完待续)

push():向数组末尾添加一个或多个元素 unshift(): 向数组的开头添加一个或多个元素 pop(): 删除数组最后一个元素 shift(): 删除数组第一个元素 sort(): 给数组排序 reverse(): 颠倒数组项在数组中的位置 concat(): 合并数组 slice(): 指定的位置开始删除指定的数组项,并且将删除的数组项构建成一个新数组 splice(): 对一个数组做删除.插入和替换 indexOf(): 从前向后查找元素在数组中位置 lastIndexOf(): 从后

JS判断一个数组中是否有重复值的三种方法

方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace(ary[i]+",","").indexOf(ary[i]+",")>-1) { alert("数组中有重复元素:" + ary[i]); break; } } 方法二: var ary = new Array("