jquery 数组去掉重复怎么比较两个数组,并返回不重复的值

&&国之画&&布布分享&&&& &&&&
版权所有 京ICP备号-2
迷上了代码!<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&1.认识数组数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数组的功能1.1 定义数组声明有10个元素的数组var a = new Array(10);此时为a已经开辟了内存空间,包含10个元素,用数组名称加 [下标] 来调用,例如 a[2] 但此时元素并未初始化,调用将返回 undefined以下代码定义了个可变数组,并进行赋值var a = new Array();a[0] = 10;a[1] = "aaa";a[2] = 12.6;上面提过了,数组里面可以放对象,例如下面代码var a =&&&&new Array();a[0]&&&&=a[1]&&&&= document.getElementByIdx_x("text");a[2]&&&&= {x:11, y:22};a[3]&&&&= new Array();数组可以实例化的时候直接赋值,例如var a = new Array(1, 2, 3, 4, 5);var b = [1, 2, 3, 4, 5];a 和 b 都是数组,只不过b用了隐性声明,创建了另一个实例,此时如果用alert(a==b)将弹出false1.2 多维数组其实Javascript是不支持多维数组的,在asp里面可以用 dim a(10,3)来定义多维数组,在Javascript里面,如果用 var a = new Array(10,3) 将报错但是之前说过,数组里面可以包含对象,所以可以把数组里面的某个元素再声明为数组,例如var a = new Array();a[0] = new Array();a[0][0] = 1;alert(a[0][0]); //弹出 1声明的时候赋值var a = new Array([1,2,3], [4,5,6],&&&&[7,8,9]);var b = [[1,2,3], [4,5,6], [7,8,9]];效果一样,a采用常规实例化,b是隐性声明,结果都是生成一个多维数组1.3 Array literals这个还真不知中文怎么叫,文字数组?说到数组,不得不说到Array Literals,数组其实是特殊的对象,对象有特有属性和方法,通过 对象名.属性 、对象.方法() 来取值和调用,而数组是通过下标来取值,Array Literals跟数组有很多相似,都是某数据类型的集合,但是Array Literals从根本来说,是个对象,声明和调用,跟数组是有区别var aa = new Object();aa.x = "cat";aa.y = "sunny";alert(aa.x);&&&&//弹出cat创建一个简单的对象,一般调用是通过aa.x,而如果当成Array literals的话,用alert(aa[&x&])一样会弹出catvar a = {x:"cat",&&&&y:"sunny"};alert(a["y"]); //弹出sunny这是另一种创建对象的方法,结果是一样的2.数组元素的操作上面已经说过,可以通过 数组[下标] 来读写元素下标的范围是 0 & (23(上标2) -1),当下标是负数、浮点甚至布尔值的时候,数组会自动转换为对象类型,例如var b&&&&= new Array();b[2.2]&&&&= "XXXXX";alert(b[2.2]); //-& XXXXX此时相当于b[&2.2&] = &XXXXX&2.1数组的循环var a = [1,2,3,4,5,6];for(var i =0; i&a. i++){alert(a[i]);}这是最常用的,历遍数组,代码将依次弹出1至6还有一种常用的var a = [1,2,3,4,5,6];for(var e in a){alert(e);}还是依次弹出1至6,for&in是历遍对象(数组是特殊的对象)对象,用在数组上,因为数组没有属性名,所以直接输出值,这结构语句用在对象上,例如下面var a = {x:1,y:2,z:3};for(var e in a){alert(e&&&&+ ":" + a[e]);}此时e取到的是属性名,即 x、y、x,而要取得值,则采用 数组名[属性],所以 a[e] 等同于 a[&x&]、a[&y&]、a[&z&]2.2数组常用函数concat在现有数组后面追加数组,并返回新数组,不影响现有数组var a = [123];var b = "sunnycat";var c =&&&&["www",21,"ido"];var d = {x:3.14, y:"SK"};var e = [1,2,3,4,[5,6,[7,8]]];alert(a.concat(b));&&&&&// -& 123,sunnycatalert(a); //&&&&-& 123alert(b.concat(c, d));&&&&&&&// -& sunnycatwww,21,ido[object&&&&Object]alert(c.concat(b));&&&&&// -& www,21,ido,sunnycatalert(e.concat(11,22,33).join(" #&&&&"));&&&&&&&// -& 1 # 2 # 3&&&&# 4 # 5,6,7,8 # 11 # 22 # 33需要注意的是只能用于数组或字符串,如果被连接(前面的a)的是数值、布尔值、对象,就会报错,字符串连接数组时,字符串会跟数组首元素拼接成新元素,而数组连接字符串则会追加新元素(这点我也不清楚原委,知情者请透露),对于数组里面包含数组、对象的,连接后保持原样join用指定间隔符连起来,把数组转为字符串var a = ['a','b','c','d','e','f','g'];lert(a.join(","));&&&// -& a,b,c,d,e,f,g 相当于a.toString()alert(a.join(" x ")); // -& a x b x c x d x e x f x g这个很容易理解,但需要注意的是只转换一维数组里面,如果数组里面还有数组,将不是采用join指定的字符串接,而是采用默认的toString(),例如var a =&&&&['a','b','c','d','e','f','g',[11,22,33]];alert(a.join(" * ")); // -& a * b * c * d * e * f * g *&&&&11,22,33数组里面的数组,并没用 * 连接pop删除数组最后一个元素,并返回该元素var a =&&&&["aa","bb","cc"];document.write(a.pop());&&&&// -& ccdocument.write(a);&&&&&&&&// -& aa, bb如果数组为空,则返回undefinedpush往数组后面添加数组,并返回数组新长度var a =&&&&["aa","bb","cc"];document.write(a.push("dd"));&&&&// -& 4document.write(a);&&&&&&&&// -& aa,bb,cc,dddocument.write(a.push([1,2,3])); // -& 5document.write(a);&&&&&&&&// -& aa,bb,cc,dd,1,2,3跟concat的区别在于,concat不影响原数组,直接返回新数组,而push则直接修改原数组,返回的是数组新长度sort数组排序,先看个例子var a = [11,2,3,,654,"asd","b"];alert(a.sort()); // -& 11,2,3,,654,asd,b结果是不是很意外,没错,排序并不是按整型大小,而是字符串对比,就是取第一个字符的ANSI码对比,小的排前面,相同的话取第二个字符再比,如果要按整型数值比较,可以这样var a = [11,2,3,,654];a.sort(function(a,b) {return a -});alert(a); //&&&&-& 2,3,11,654,sort()方法有个可选参数,就是代码里的function,这是个简单的例子,不可对非数字进行排序,非数字需要多做判断,这里就不多讲reverse对数组进行反排序跟,sort()一样,取第一字符ASCII值进行比较var a = [11,3,5,66,4];alert(a.reverse()); // -& 4,66,5,3,11如果数组里面还包含数组,则当为对象处理,并不会把元素解出来&var a = ['a','b','c','d','e','f','g',[4,11,33]];alert(a.reverse()); // -& 4,11,33,g,f,e,d,c,b,aalert(a.join(" * ")); // -& 4,11,33 * g * f * e * d * c * b * a按理应该是11排最后面,因为这里把 4,11,33 当做完整的对象比较,所以被排在第一位。看不明白的话,用join()串起来,就明了多shift删除数组第一个元素,并返回该元素,跟pop差不多var a =&&&&["aa","bb","cc"];document.write(a.shift());&&&// -& aadocument.write(a);&&&&&&&&// -& bb,cc当数组为空时,返回undefinedunshift跟shift相反,往数组最前面添加元素,并返回数组新长度var a =&&&&["aa","bb","cc"];document.write(a.unshift(11));&&&// -& 4 注:IE下返回undefineddocument.write(a);&&&&&&&&// -& 11,aa,bb,ccdocument.write(a.unshift([11,22]));&&&// -& 5document.write(a);&&&&&&&&// -& 11,22,11,aa,bb,ccdocument.write(a.unshift("cat")); // -& 6document.write(a);&&&&&&&&// -& cat,11,22,11,aa,bb,cc注意该方法,在IE下将返回undefined,貌似微软的bug,我在firefox下则能正确发挥数组新长度slice返回数组片段var a = ['a','b','c','d','e','f','g'];alert(a.slice(1,2)); // -& balert(a.slice(2));&&&&// -& c,d,e,f,galert(a.slice(-4));&&&// -& d,e,f,galert(a.slice(-2,-6));&&&&// -& 空a.slice(1,2),从下标为1开始,到下标为2之间的数,注意并不包括下标为2的元素如果只有一个参数,则默认到数组最后-4是表示倒数第4个元素,所以返回倒数的四个元素最后一行,从倒数第2开始,因为是往后截取,所以显然取不到前面的元素,所以返回空数组,如果改成 a.slice(-6,-2) 则返回b,c,d,esplice从数组删除某片段的元素,并返回删除的元素var a = [1,2,3,4,5,6,7,8,9];document.write(a.splice(3,2));&&&&// -& 4,5document.write(a);&&&&&&&&// -& 1,2,3,6,7,8,9document.write(a.splice(4)); // -& 7,8,9 注:IE下返回空document.write(a);&&&&&&&&// -& 1,2,3,6document.write(a.splice(0,1));&&&&// -& 1document.write(a);&&&&&&&&// -& 2,3,6document.write(a.splice(1,1,["aa","bb","cc"]));&&&// -& 3document.write(a);&&&&&&&&// -& 2,aa,bb,cc,6,7,8,9document.write(a.splice(1,2,"ee").join("#")); // -& aa,bb,cc#6document.write(a);&&&&&&&&// -& 2,ee,7,8,9document.write(a.splice(1,2,"cc","aa","tt").join("#")); // -& ee#7document.write(a);&&&&&&&&// -& 2,cc,aa,tt,8,9注意该方法在IE下,第二个参数是必须的,不填则默认为0,例如a.splice(4),在IE下则返回空,效果等同于a.splice(4,0)toString把数组转为字符串,不只数组,所有对象均可使用该方法var a =&&&&[5,6,7,8,9,["A","BB"],100];document.write(a.toString());&&&&// -& 5,6,7,8,9,A,BB,100var b = new Date()document.write(b.toString());&&&&// -& Sat Aug 8 17:08:32 UTC+0800&&&&2009var c = function(s){alert(s);}document.write(c.toString());&&&&// -& function(s){ alert(s); }布尔值则返回true或false,对象则返回[object objectname]相比join()方法,join()只对一维数组进行替换,而toString()则把整个数组(不管一维还是多维)完全平面化同时该方法可用于10进制、2进制、8进制、16进制转换,例如var a =&&&&[5,6,7,8,9,"A","BB",100];for(var i=0; i&a. i++){document.write(a[i].toString()&&&&+ " 的二进制是 "&&&&+ a[i].toString(2) + " ,八进制是 " + a[i].toString(8) + " ,十六进制是 " + a[i].toString(16)); //&&&&-& 4,5}输出结果5 的二进制是 101 ,八进制是 5 ,十六进制是 56 的二进制是 110 ,八进制是 6 ,十六进制是 67 的二进制是 111 ,八进制是 7 ,十六进制是 78 的二进制是 1000 ,八进制是 10 ,十六进制是 89 的二进制是 1001 ,八进制是 11 ,十六进制是 9A 的二进制是 A ,八进制是 A ,十六进制是 ABB 的二进制是 BB ,八进制是 BB ,十六进制是 BB100 的二进制是 1100100 ,八进制是 144 ,十六进制是 64转换只能在元素进行,如果对整个数组进行转换,则原封不动返回该数组toLocaleString返回本地格式字符串,主要用在Date对象上var a = new Date();document.write(a.toString());&&&&// -& Sat Aug 8 17:28:36 UTC+0800&&&&2009document.write(a.toLocaleString());&&&// -& 日 17:28:36document.write(a.toLocaleDateString());&&&// -& 日区别在于,toString()返回标准格式,toLocaleString()返回本地格式完整日期(在【控制面板】&&【区域和语言选项】,通过修改[时间]和[长日期]格式),toLocaleDateString()跟toLocaleString()一样,只是少了时间valueOf根据不同对象返回不同原始值,用于输出的话跟toString()差不多,但是toString()是返回string类型,而valueOf()是返回原对象类型var a = [1,2,3,[4,5,6,[7,8,9]]];var b = new Date();var c =var d = function(){alert("sunnycat");};document.write(a.valueOf());&&&&// -& 1,2,3,4,5,6,7,8,9document.write(typeof (a.valueOf())); // -& objectdocument.write(b.valueOf());&&&&// -& 2document.write(typeof(b.valueOf())); // -& numberdocument.write(c.valueOf());&&&&// -& truedocument.write(typeof(c.valueOf())); // -& booleandocument.write(d.valueOf());&&&&// -& function () {&&&&alert("sunnycat"); }document.write(typeof(d.valueOf())); // -& function数组也是对象,所以typeof (a.valueOf())返回object,返回的依然是个多维数组var a = [1,2,3,[4,5,6,[7,8,9]]];var aa = a.valueOf();document.write(aa[3][3][1]); // -& 8Date对象返回的是距离日的毫秒数,Math和Error对象没有valueOf方法
阅读(...) 评论()posts - 57,&
comments - 27,&
trackbacks - 0
一、问题:当需要对两个或多个“对象”进行比较时...;
二、条件:1、创建一个只能存放两个(或多个)数值的数组 ; 2、同一数值不能重复存放
三、方法:直接看代码:
//创建一个新的数组
var arrayList = new Array();
//用于辅助判断是否含有重复值;
var tureOrFalse = 0;
//检测方法
function checkArrayList(_this,_num){
//判断数组的个数是否超过了指定的值;
if(arrayList.length & _num){
//获得存放数组的值(这里用ID);
var thisId =
$(_this).attr(&id&);
for( var j=0 ; j&arrayList. j++){
if(thisId == arrayList[j]){
tureOrFalse ++;
//获得值后进行检测已有的数组中是否含有将要加入的值;
if(tureOrFalse & 0){
tureOrFalse = 0;
alert(&亲,你已选了该数值,不能重复选择的哦!&);
arrayList[arrayList.length] = thisId;
alert(&亲,你已选择了&+ _num+&个数值进行对比了哦!!&)
//点击进行添加对比的对象;
$(&.clickSpan&).click(function(){
// 2为你所以对比的总个数;
checkArrayList(this,&2&);
//清除数组
$(&.c&).click(function(){
arrayList = [];
alert(&GOOD! 数组清除成功!!&);
//打印数组
$(&.p&).click(function(){
if(arrayList.length & 0){
var list = &&;
for( var p=0 ; p&arrayList. p++){
list += &第&+ (p+1) + &个为:& + arrayList[p] + &\n&;
alert(list);
alert(&亲,你的动作也真是太快了。该数组还没有加入值哦!!&);
四、具体例子下载:
阅读(...) 评论()jQuery实用函数用法总结
投稿:shichen2014
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了jQuery实用函数用法总结,汇总了jQuery常用的函数及相关技巧,需要的朋友可以参考下
本文以实例的形式总结了jQuery的常见实用函数。分享给大家供大家参考之用。具体示例如下:
1.修剪字符串
$('#id').val($.trim($('#someid').val()))
2.遍历集合
可能这样写:
var anArray = ['one','two'];
for(var n = 0; n & anArray. n++){
还有可能这样写:
var anObject = {one: 1, two: 2};
for(var p in anObject){
但有了$.each函数后,就可以这样写了:
var anArray = ['one','two'];
$.each(anArray, funtion(n, value){
var anObject = {one: 1, two: 2};
$.each(anObjct, function(name,value){
3.筛选数组
使用$.grep()方法能筛选数组。先来看grep方法的定义:
grep: function(elems, callback, inv){
var ret = [], retV
for(var i = 0; length = elems. i & i++){
retVal = !!callback(elems[i],i)
if(inv !== retVal){
ret.push(elems[i]);
以上示例中:
① grep方法的第二个参数是回调函数,该回调函数接收2个参数,一个是数组的元素,一个是数组的索引。
② grep方法的第三个参数inv,默认情况下是undefined,所以!!inv为false,即inv的默认值是false
举例1:int类型数组
var arr = [1, 2, 3, 4, 5, 6];
arr = $.grep(arr, function(val, index){
return val & 3;
console.log(arr);//结果是:4 5 6
如果把grep的第三个参数显式地设置为true,结果怎样呢?
var arr = [1, 2, 3, 4, 5, 6];
arr = $.grep(arr, function(val, index){
return val & 3;
console.log(arr);//结果是:1 2 3
可见,当把grep方法的第三个参数设置为true后,会把不符合回调函数的数组元素过滤出来。
举例2:object类型数组
var arr = [
first: "Jeffrey",
last: 'Way'
first: 'Allison',
last: 'Way'
first: 'John',
last: 'Doe'
first: 'Thomas',
last: 'Way'
arr = $.grep(arr, function(obj, index){
return obj.last === 'Way';
console.log(arr);
4.转换数组
使用$.map(arr, callback)为数组的每一个元素调用回调函数,并返回一个新的数组
给数组的每一个元素加1:
var oneBased = $.map([0, 1, 2, 3, 4], function(value){return value +1;})
把字符串数组转换成整型数字数组,判断数组元素是否是数字:
var strings = ['1', '2', '3','4','S','6'];
var values = $.map(strings, function(value){
var result = new Number(value);
return isNaN(result) &#63; null :
把转换后的数组合并到原先的数组中:
var chars = $.map(['this','that'], function(value){return value.split(' ')});
5.返回数组元素的索引
使用$.inArray(value, array)返回传入的值第一次出现的下标,即索引。
var index = $.inArray(2, [1, 2, 3]);
6.将对象转换成数组
$.makeArray(object)将传入类似数组的对象转换成Javascript数组。
&div&First&/div&
&div&Second&/div&
&div&Third&/div&
&div&Fourth&/div&
var elems = document.getElementsByTagName("div");
var arr = jQuery.makeArray(elems);
arr.reverse();
$(arr).appendTo(document.body);
7.得到不含重复元素的数组
使用$.unique(array)返回由原始数组中不重复的元素组成的数组。
&div&There are 6 divs in this document.&/div&
&div&&/div&
&div class="dup"&&/div&
&div class="dup"&&/div&
&div class="dup"&&/div&
&div&&/div&
//把到所有div,get方法转换成javascript数组,总共6个div
var divs = $("div").get();
//再把3个class名为dup的div合并到前面的6个div
divs = divs.concat($(".dup").get());
alert(divs.length); //9个div
//过滤去掉重复
divs = jQuery.unqiue(divs);
alert(divs.length);//6个div
8.合并2个数组
$.merge(array1, array2)把第二个数组合并到第一个数组中,并返回第一个数组。
var a1 = [1, 2];
var a2 = [2, 3];
$.merge(a1, a2);
console.log(a1);//[1, 2, 2, 3]
9.把对象序列化成查询字符串
$.param(params)把传入的jquery对象或javascript对象转换成字符串形式。
$(document).ready(function(){
personObj=new Object();
personObj.firstname="John";
personObj.lastname="Doe";
personObj.age=50;
personObj.eyecolor="blue";
$("button").click(function(){
$("div").text($.param(personObj));
结果:firstname=John&lastname=Doe&age=50&eyecolor=blue
10.一些判断函数
$.isArray(o) 如果o是javascript数组,则返回true,如果是类似数组的jquery对象数组,返回false
$.isEmptyObject(o) 如果o是不包含属性的javascript对象,则返回true
$.isFunction(o) 如果o是javascript函数就返回true
$.isPlainObject(o) 如果o是通过{}或new Object()创建的对象,则返回true
$.isXMLDoc(node) 如果node是XML文档或者是XML文档中的节点,则返回true
11.判断一个元素是否包含在另外一个元素中
$.contains(container, containee)第二个参数是被包含
$.contains( document.documentElement, document.body ); // true
$.contains( document.body, document.documentElement ); // false
12.把值存储到某元素上
$.data(element, key, value)第一个是javascript对象,第二、第三个是键值。
//得到一个div的javascript对象
var div = $("div")[0];
//把键值存储到div上
jQuery.data(div, "test",{
first: 16,
last: 'pizza'
//根据键读出值
jQuery.data(div, "test").first
jQuey.data(div, "test").last
13.移除存储到某元素上的值
&div&value1 before creation: &span&&/span&&/div&
&div&value1 after creation: &span&&/span&&/div&
&div&value1 after removal: &span&&/span&&/div&
&div&value2 after removal: &span&&/span&&/div&
var div = $( "div" )[ 0 ];
jQuery.data( div, "test1", "VALUE-1" );
jQuery.removeData( div, "test1" );
14.绑定函数的上下文
jQuery.proxy( function, context)返回一个新的function函数,上下文是context。
$(document).ready(function(){
var objPerson = {
name: "John Doe",
test: function(){
$("p").after("Name: " + this.name + "&br& Age: " + this.age);
$("button").click($.proxy(objPerson,"test"));
以上,点击按钮,执行的是test方法,不过test方法的上下文做了设置。
15.解析JSON
jQuery.parseJSON( json )第一个参数json的类型是字符串。
var obj = jQuery.parseJSON( '{ "name": "John" }' );
alert( obj.name === "John" );
16.表达式求值
有时候,希望一段代码在全局上下文中执行,可以使用jQuery.globalEval( code )。code的类型是字符串。
function test() {
jQuery.globalEval( "var newVar =" )
17.动态加载脚本
$(selector).getScript(url,success(response,status))用来动态加载js文件,第一个参数是js的文件路径,第二个参数可选,表示获取js文件成功的回调。
$.getScript( "ajax/test.js", function( data, textStatus, jqxhr ) {
console.log( data ); // Data returned
console.log( textStatus ); // Success
console.log( jqxhr.status ); // 200
console.log( "Load was performed." );
相信本文所述对大家的jQuery程序设计有一定的借鉴价值。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 jquery数组判断重复 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信