>  기사  >  웹 프론트엔드  >  JavaScript에서 배열 및 작업 정의 및 jquery 배열 작업 jQuery

JavaScript에서 배열 및 작업 정의 및 jquery 배열 작업 jQuery

高洛峰
高洛峰원래의
2017-02-06 09:55:051223검색

먼저 javascript jquery에서 배열 정의와 연산에 대한 관련 지식을 소개하겠습니다. 구체적인 내용은 다음과 같습니다.

1. 배열의 이해

배열이란 특정 유형의 데이터 모음 및 데이터 유형 정수, 문자열 또는 객체일 수 있습니다
Javascript는 다차원 배열을 지원하지 않지만 배열은 객체를 포함할 수 있기 때문에(배열은 또한 객체), 배열은 서로 중첩되어 다차원 배열과 유사한 기능을 구현할 수 있습니다

1.1 배열 정의

10개의 요소로 구성된 배열 선언

var a = new Array(10);

이때, 10개의 요소를 포함하는 a에 대한 메모리 공간이 열렸습니다. a[2]와 같은 호출에 배열 이름과 [아래 첨자]를 사용하지만 요소가 현재 초기화되지 않은 경우 호출은 정의되지 않은

다음 코드는 변수 배열을 정의하고 값을 할당합니다

var a = new Array();
a[0] = 10;
a[1] = "aaa";
a[2] = 12.6;

위에서 언급한 것처럼 객체 배열은 내부에 배치될 수 있습니다. 예를 들어 다음 코드

var a =  new Array();
a[0]  = true;
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는 암시적 선언을 사용하여 다른 인스턴스를 생성합니다. (a==b)가 사용되었습니다. false

1.2 다차원 배열

은 실제로 Javascript에서 지원되지 않습니다. 다차원 배열의 경우 희미한 a(10,3)을 사용할 수 있습니다. ASP에서 다차원 배열을 정의하려면 Javascript에서 var a = new Array(10,3)을 사용하면 오류가 보고됩니다

하지만 앞서 언급한 대로 Contains 객체를 사용할 수 있으므로 요소를 선언할 수 있습니다. 예를 들어

var a = new Array();
a[0] = new Array();
a[0][0] = 1;
alert(a[0][0]); //弹出 1

는 선언 시 값이 할당됩니다. a는 일반적인 인스턴스화를 사용하고 b는 암시적 선언이며 결과는 다차원 배열입니다.

1.3 배열 리터럴

이것을 중국어로 리터럴 배열이라고 부르는지 정말 모르겠습니다. ?

배열 얘기가 나와서 말인데, 배열 리터럴에 대해 이야기해야 합니다. 배열은 실제로 특별한 개체입니다. 개체에는 고유한 속성과 메서드가 있습니다. 값과 호출은 개체 이름.property, object.method()를 통해 얻어집니다. 다음 Mark를 통해 값을 얻습니다. 배열 리터럴은 여러 면에서 배열과 유사하지만 둘 다 특정 데이터 유형의 컬렉션입니다. 그러나 배열 리터럴은 기본적으로 배열과 다릅니다.

var a = new Array([1,2,3], [4,5,6],  [7,8,9]);
var b = [[1,2,3], [4,5,6], [7,8,9]];

간단한 객체를 생성합니다. 일반적으로 호출은 aa를 통해 이루어집니다. 🎜>이것은 객체를 생성하는 또 다른 방법이며 결과는 동일합니다


2.

위에서 언급한 것처럼 배열 [subscript]를 통해 요소를 읽고 쓸 수 있습니다.

아래 첨자의 범위는 0 – (23(위 첨자 2) -1)입니다. 숫자, 부동 소수점 또는 부울 값일 경우 배열은 자동으로

var aa = new Object();
aa.x = "cat";
aa.y = "sunny";
alert(aa.x);  //弹出cat

와 같은 객체 유형으로 변환됩니다. 이는 b["2.2"] = "XXXXX"와 동일합니다.

2.1 배열 루프

var a = {x:"cat",  y:"sunny"};
alert(a["y"]); //弹出sunny

가장 일반적으로 사용되는 방식입니다. 배열을 순회하면 코드가 1~6까지 순서대로 나타납니다.

거기 또한 일반적으로 사용되는

var b  = new Array();
b[2.2]  = "XXXXX";
alert(b[2.2]); //-> XXXXX

는 1부터 6까지 순서대로 팝업됩니다. for...in은 순회 객체입니다(배열은 특수 객체입니다). 객체는 배열에 사용되기 때문입니다. 배열에는 속성 이름이 없으므로 값이 직접 출력됩니다. 이 구조 문은 다음

var a = [1,2,3,4,5,6];
for(var i =0; i<a.length; i++){
alert(a[i]);
}

과 같이 이때 e가 가져오는 것은 속성 이름입니다. 즉, x, y, x 값을 얻으려면 배열 이름 [속성]이 사용되므로 a[e]는 a["x"], a["y"], a ["z" ]

2.2 일반 배열 함수

concat

기존 배열 뒤에 배열을 추가하고 기존 배열에 영향을 주지 않고 새 배열을 반환합니다.

var a = [1,2,3,4,5,6];
for(var e in a){
alert(e);
}

주의할 점은 배열이나 문자열에만 사용할 수 있다는 점입니다. 연결된(앞의 a)이 숫자 값, 불리언 값, 객체인 경우 문자열을 배열에 연결하면 오류가 발생합니다. , 문자 문자열은 배열의 첫 번째 요소와 이어져 새 요소를 형성하고, 배열 연결 문자열은 새 요소를 추가합니다. (이유는 모르겠습니다. 알고 계시다면 공개해 주세요.) 배열과 배열의 객체는 연결 후에도 그대로 유지됩니다

join

지정된 구분 기호로 배열을 연결하고 배열을 문자열로 변환

var a = {x:1,y:2,z:3};
for(var e in a){
alert(e  + ":" + a[e]);
}

이해하기 쉽지만 주의할 점은 변환만 1차원 배열에서 배열에 배열이 있으면 Join으로 지정한 문자열 연결은 사용하지 않고 기본 toString()을 사용한다는 점입니다. 작동하지 않습니다. * 연결

pop

은 배열의 마지막 요소를 삭제합니다. 그리고 요소를 반환합니다

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,sunnycat
alert(a); //  -> 123
alert(b.concat(c, d));    // -> sunnycatwww,21,ido[object  Object]
alert(c.concat(b));   // -> www,21,ido,sunnycat
alert(e.concat(11,22,33).join(" #  "));    // -> 1 # 2 # 3  # 4 # 5,6,7,8 # 11 # 22 # 33

배열이 비어 있으면 정의되지 않은 값을 반환합니다

push

배열 끝에 배열을 추가하고 배열의 새 길이

var a = [&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;,&#39;e&#39;,&#39;f&#39;,&#39;g&#39;];
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

concat과 concat의 차이점은 concat은 원래 배열에 영향을 주지 않고 직접 반환한다는 점입니다. 새 배열인 반면, push는 원본 배열을 직접 수정하여 반환합니다. 새로운 길이의 배열

sort

배열 정렬, 먼저 예제를 살펴보겠습니다

var a =  [&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;,&#39;e&#39;,&#39;f&#39;,&#39;g&#39;,[11,22,33]];
alert(a.join(" * ")); // -> a * b * c * d * e * f * g *  11,22,33

결과가 놀랍지 않나요? 정렬은 정수 크기가 아닌 문자열 비교를 기반으로 합니다. 즉, 첫 번째 문자의 ANSI 코드를 비교하고, 같은 경우 두 번째 문자와 비교합니다. , 이렇게 할 수 있습니다.

var a =  ["aa","bb","cc"];
document.write(a.pop());  // -> cc
document.write(a);    // -> aa, bb

sort() 메서드에는 코드의 함수인 선택적 매개변수가 있습니다. 이는 숫자가 아닌 항목은 정렬할 수 없습니다. 숫자가 아닌 경우 더 많은 판단이 필요하므로 여기에서는 자세히 설명하지 않겠습니다.

reverse

배열의 역순 정렬은 sort()와 동일하며 첫 번째 문자의 ASCII 값을 사용합니다. 비교용

var a =  ["aa","bb","cc"];
document.write(a.push("dd"));  // -> 4
document.write(a);    // -> aa,bb,cc,dd
document.write(a.push([1,2,3])); // -> 5
document.write(a);    // -> aa,bb,cc,dd,1,2,3

배열에 배열도 포함되어 있으면 객체로 처리되어 요소가 해결되지 않습니다.

var a = [11,2,3,33445,5654,654,"asd","b"];
alert(a.sort()); // -> 11,2,3,33445,5654,654,asd,b

按理应该是11排最后面,因为这里把 4,11,33 当做完整的对象比较,所以被排在第一位。看不明白的话,用join()串起来,就明了多

shift

删除数组第一个元素,并返回该元素,跟pop差不多

var a =  ["aa","bb","cc"];
document.write(a.shift());  // -> aa
document.write(a);    // -> bb,cc

当数组为空时,返回undefined

unshift

跟shift相反,往数组最前面添加元素,并返回数组新长度

var a =  ["aa","bb","cc"];
document.write(a.unshift(11));  // -> 4 注:IE下返回undefined
document.write(a);    // -> 11,aa,bb,cc
document.write(a.unshift([11,22]));  // -> 5
document.write(a);    // -> 11,22,11,aa,bb,cc
document.write(a.unshift("cat")); // -> 6
document.write(a);    // -> cat,11,22,11,aa,bb,cc

注意该方法,在IE下将返回undefined,貌似微软的bug,我在firefox下则能正确发挥数组新长度

slice

返回数组片段

var a = [&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;,&#39;e&#39;,&#39;f&#39;,&#39;g&#39;];
alert(a.slice(1,2)); // -> b
alert(a.slice(2));  // -> c,d,e,f,g
alert(a.slice(-4));  // -> d,e,f,g
alert(a.slice(-2,-6));  // -> 空

a.slice(1,2),从下标为1开始,到下标为2之间的数,注意并不包括下标为2的元素
如果只有一个参数,则默认到数组最后
-4是表示倒数第4个元素,所以返回倒数的四个元素
最后一行,从倒数第2开始,因为是往后截取,所以显然取不到前面的元素,所以返回空数组,如果改成 a.slice(-6,-2) 则返回b,c,d,e

splice

从数组删除某片段的元素,并返回删除的元素

var a = [1,2,3,4,5,6,7,8,9];
document.write(a.splice(3,2));  // -> 4,5
document.write(a);    // -> 1,2,3,6,7,8,9
document.write(a.splice(4)); // -> 7,8,9 注:IE下返回空
document.write(a);    // -> 1,2,3,6
document.write(a.splice(0,1));  // -> 1
document.write(a);    // -> 2,3,6
document.write(a.splice(1,1,["aa","bb","cc"]));  // -> 3
document.write(a);    // -> 2,aa,bb,cc,6,7,8,9
document.write(a.splice(1,2,"ee").join("#")); // -> aa,bb,cc#6
document.write(a);    // -> 2,ee,7,8,9
document.write(a.splice(1,2,"cc","aa","tt").join("#")); // -> ee#7
document.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,100
var b = new Date()
document.write(b.toString());  // -> Sat Aug 8 17:08:32 UTC+0800  2009
var 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.length; i++){
document.write(a[i].toString()  + " 的二进制是 "  + a[i].toString(2) + " ,八进制是 " + a[i].toString(8) + " ,十六进制是 " + a[i].toString(16)); //  -> 4,5
}

输出结果

5 的二进制是 101 ,八进制是 5 ,十六进制是 5
6 的二进制是 110 ,八进制是 6 ,十六进制是 6
7 的二进制是 111 ,八进制是 7 ,十六进制是 7
8 的二进制是 1000 ,八进制是 10 ,十六进制是 8
9 的二进制是 1001 ,八进制是 11 ,十六进制是 9
A 的二进制是 A ,八进制是 A ,十六进制是 A
BB 的二进制是 BB ,八进制是 BB ,十六进制是 BB
100 的二进制是 1100100 ,八进制是 144 ,十六进制是 64

转换只能在元素进行,如果对整个数组进行转换,则原封不动返回该数组

toLocaleString

返回本地格式字符串,主要用在Date对象上

var a = new Date();
document.write(a.toString());  // -> Sat Aug 8 17:28:36 UTC+0800  2009
document.write(a.toLocaleString());  // -> 2009年8月8日 17:28:36
document.write(a.toLocaleDateString());  // -> 2009年8月8日

区别在于,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 = true;
var d = function(){
alert("sunnycat");
};
document.write(a.valueOf());  // -> 1,2,3,4,5,6,7,8,9
document.write(typeof (a.valueOf())); // -> object
document.write(b.valueOf());  // -> 1249874470052
document.write(typeof(b.valueOf())); // -> number
document.write(c.valueOf());  // -> true
document.write(typeof(c.valueOf())); // -> boolean
document.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]); // -> 8

Date对象返回的是距离1970年1月1日的毫秒数,
Math和Error对象没有valueOf方法

Jquery 数组操作

在jquery中处理JSON数组的情况中遍历用到的比较多,但是用添加移除这些好像不是太多。
今天试过json[i].remove(),json.remove(i)之后都不行,看网页的DOM对象中好像JSON数据是以数组的形式出现的,查阅了下相关JS中数组的操作一试果然很爽。
记录下来。

1、数组的创建

var arrayObj = new Array(); //创建一个数组
var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度
var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创建一个数组并赋值

    要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外的,注意:这时长度会随之改变。

2、数组的元素的访问

var testGetArrValue=arrayObj[1]; //获取数组的元素值
arrayObj[1]= "这是新值"; //给数组元素赋予新的值

3、数组元素的添加

arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组结尾,并返回数组新长度
arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度
arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//将一个或多个新元素插入到数组的指定位置,插入位置的元素自动后移,返回""

4、数组元素的删除

arrayObj.pop(); //移除最后一个元素并返回该元素值
arrayObj.shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移
arrayObj.splice(deletePos,deleteCount); //删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素

5、数组的截取和合并

arrayObj.slice(start, [end]); //以数组的形式返回数组的一部分,注意不包括 end 对应的元素,如果省略 end 将复制 start 之后的所有元素
arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组

6、数组的拷贝

arrayObj.slice(0); //返回数组的拷贝数组,注意是一个新的数组,不是指向
arrayObj.concat(); //返回数组的拷贝数组,注意是一个新的数组,不是指向

7、数组元素的排序
arrayObj.reverse(); //反转元素(最前的排到最后、最后的排到最前),返回数组地址
arrayObj.sort(); //对数组元素排序,返回数组地址

8、数组元素的字符串化

arrayObj.join(separator); //返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。
toLocaleString 、toString 、valueOf:可以看作是join的特殊用法,不常用

更多JavaScript jQuery 中定义数组与操作及jquery数组操作相关文章请关注PHP中文网!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.