JavaScript-原生Array对象要领详解(一)

1、join()

join() 要领用于把数组中的一切元素转换为一个字符串。元素是经由过程指定的分开符举行分开的。
arrayObject.join(separator)参数代表分开符,是可选的。如果不传参数,默许逗号。

注重返回值是字符串,不是数组。
注重:该要领不会转变原数组。

var arr = [1, 2, 3, 4, 7, 9, 6];
arr.join(); // "1,2,3,4,7,9,6"
arr.join(" "); // "1 2 3 4 7 9 6"
arr.join(""); //"1234796"
var a = new Array(10); //长度为10的空数组
a.join("*"); //"*********";9个*标记构成的字符串

join()要领是String.split()要领的逆向操纵,后者是将字符串分割成若干块来建立一个数组。

2、sort()

sort() 要领用于对数组的元素举行排序并返回排序后的数组。

注重:该要领会转变本来的数组

  • 当不带参数调用时,数组元素根据字母表排序(必要时暂时转换为字符串比较)。

//字母表递次排序
var a = [1, 2, 3, 4, 7, 9, 6];
a.sort() //[1, 2, 3, 4, 6, 7, 9];

//字母表递次排序
var b = [33, 222, 4, 1111, 5555];
b.sort() //[1111, 222, 33, 4, 5555]

//字母表递次排序
var c = ['c', 'ab', 'cd', 'a', 'f'];
c.sort() //["a", "ab", "c", "cd", "f"]

//字母表递次排序,若有大写,大写在前,小写在后
var d = ['a', 'Ah', 'D', 'bcc'];
d.sort() //["Ah", "D", "a", "bcc"]

//如果数组有''元素,它们会排在数组的头部
var e = ['a', 'Ah', 'D', 'bcc', '', ''];
e.sort() //["", "", "Ah", "D", "a", "bcc"]

//如果数组包含undefined元素,它们会排在数组的尾部
  • 为了根据其他体式格局而非字母表递次举行数组排序,必修给sort()通报一个比较函数作为参数。该函数决议了它的两个参数在数组中的排序。返回负数,第一个参数在前。反之,返回正数,第一个参数在后。如果返回0,也就是说排序可有可无。

var b = [33, 222, 4, 1111, 5555];
b.sort() //[1111, 222, 33, 4, 5555]; 字母表递次
b.sort(function(a, b) {
    return a - b;
}); //[4, 33, 222, 1111, 5555];  数值递次

var d = ['a', 'Ah', 'D', 'bcc'];
d.sort() //["Ah", "D", "a", "bcc"]  辨别大小写
d.sort(function(f, g) {
    var x = f.toLowerCase(); //都转换为小写
    var y = g.toLowerCase(); //都转换为小写
    if (x < y) return -1;
    if (x > y) return 1;
}); //["a", "Ah", "bcc", "D"] 不辨别大小写

注重,这里运用匿名函数表达式异常轻易。既然函数只运用一次,就没必要给它定名了。

3、reverse()

everse() 要领用于倒置数组中元素的递次,返回逆序的数组。

注重:该要领会转变本来的数组

reverse()是sort()的逆序版,reverse()的细致排序行动请拜见上文 sort() 要领的诠释。

var b = [33, 222, 4, 1111, 5555];
b.sort(); //[1111, 222, 33, 4, 5555] 正排序
b.reverse(); //[5555, 1111, 4, 222, 33] 逆排序
4、push()

push() 要领可向数组的末端增加一个或多个元素,并返回新的长度,也就是增加元素后的数组长度。

注重:该要领会转变本来的数组

arrayObject.push(newelement1, newelement2, …., newelementX)

push()要领起码要有一个参数。push() 要领可把它的参数递次增加到 arrayObject 的尾部。push() 要领和 pop() 要领运用数组供应的先进后出栈的功用。

注重:push()要领中的参数不论是什么范例(数组、对象等),一个参数将会被作为一个团体元素插进去 arrayObject 的尾部,不做拆分,详见示例。

var a = ["a","b"];

var b = {
  name: "Tom"
};

var c = [1,2,3];

console.log(a); // ["a", "b"]
console.log(a.push(b)); //3
console.log(a);
/*["a", "b", [object Object] {
  name: "Tom"
}]*/
console.log(a.push(c));
console.log(a); //4
/*["a", "b", [object Object] {
  name: "Tom"
}, [1, 2, 3]]*/
5、pop()

pop() 要领用于删除并返回数组的末了一个元素。

注重:该要领会转变本来的数组

pop() 要领将转变数组(删除数组的末了一个元素,把数组长度减 1),而且返回它删除的元素的值。如果数组已为空,则 pop() 不转变数组,并返回 undefined 值。

var arr = ["George", "John", "Thomas"];
console.log(arr.pop());  // "Thomas"
console.log(arr);  / /["George", "John"];
console.log(arr.pop()); //"John"
console.log(arr); // ["George"]
console.log(arr.pop()); //"George"
console.log(arr); //[]
console.log(arr.pop()); //undefined
console.log(arr); //[]
6、unshift()

unshift() 要领可向数组的开首增加一个或更多元素,并返回新的长度。

注重:该要领会转变本来的数组

arrayObject.unshift(newelement1, newelement2, …., newelementX)

参数newelement1……X最少要有一个。unshift() 要领将把它的参数插进去 arrayObject 的头部,并将已存在的元素依次地移到较高的下标处,以便留出空间。该要领的第一个参数将成为数组的新元素 0,如果另有第二个参数,它将成为新的元素 1,以此类推。

在IE6与IE7中,unshift()会返回 underfined!

var arr = ["George", "John", "Thomas"];
console.log(arr.unshift("William")); //4
console.log(arr.unshift("Tom", "Jerry")); //6
console.log(arr); //["Tom", "Jerry", "William", "George", "John", "Thomas"]
7、shift()

shift() 要领用于把数组的第一个元素从个中删除,并返回第一个元素的值。

如果数组是空的,那末 shift() 要领将不举行任何操纵,返回 undefined 值。
注重:该要领会转变本来的数组

var arr = ["George", "John", "Thomas"];
console.log(arr.shift()); //"George"
console.log(arr); //["John", "Thomas"]
console.log(arr.shift()); //"John"
console.log(arr); //["Thomas"]
console.log(arr.shift()); //"Thomas"
console.log(arr); //[]
console.log(arr.shift()); //undefined
8、contact()

concat() 要领用于衔接两个或多个数组。

该要领不会转变现有的数组,而仅仅会返回被衔接数组的一个副本。

注重:参数是必需的。可所以详细的值,也可所以数组对象,可所以恣意多个。如果参数是元素,则拼接元素。如果参数是数组,则拼接数组中的元素,并不是数组自身。

var a = [1,2,3];
var b = a.concat(4,5);
var c = a.concat(4,5,[6,7],8,"123");

console.log(a);  //[1, 2, 3]
console.log(b);  //[1, 2, 3, 4, 5]
console.log(c);  //[1, 2, 3, 4, 5, 6, 7, 8, "123"]
9、slice()

slice() 要领可从已有的数组中返回选定的元素,一个片段或一个子数组。

注重,该要领并不会修正数组,要领会返回一个新的数组,包含从 start 到 end (不包含该元素)的 arrayObject 中的元素。

arrayObject.slice(start, end)参数start是必需的,划定从那边最先拔取,如果是负数,那末它划定从数组尾部最先算起的位置。也就是说,-1 指末了一个元素,-2 指倒数第二个元素,以此类推。

参数end是可选的,划定从那边完毕拔取,该参数是数组片段完毕处的数组下标。如果没有指定该参数,那末切分的数组包含从 start 到数组完毕的一切元素。如果这个参数是负数,那末它划定的是从数组尾部最先算起的元素。

在运用slice()时,如果参数start超过了数组的出发点,则会从数组头部最先;如果参数end超过了数组的末端,则会从数组的尾部完毕;如果start和end中的局限不在数组中,或许end小于start,则会返回空数组;如果start和end不为数字,则会举行转换,转换失利的话,start默许为0,end默许为0。详见示例:

var arr = ["George", "John", "Thomas", "James", "Adrew", "Martin"];
console.log(arr.slice(2,4));      //["Thomas", "James"]
console.log(arr.slice(-3,4));     //["James"]
console.log(arr.slice(-10,4));    //["George", "John", "Thomas", "James"]
console.log(arr.slice(-10,-4));   //["George", "John"]
console.log(arr.slice(4,3));      //[]
console.log(arr.slice(-20,-10));  //[]
console.log(arr.slice("2","4"));  //["Thomas", "James"]
console.log(arr.slice("a","4"));  //["George", "John", "Thomas", "James"]
console.log(arr.slice("a","b"));  //[]
console.log(arr.slice("2a","4a"));//[]
console.log(arr.slice("",""));    //[]
10、splice()

splice() 要领用于插进去、删除或替代数组的元素。

注重:splice()会直接对原数组举行修正。

arrayObject.splice(index, howmany, element1, ….., elementX)
参数index是必需的。划定从那边增加/删除元素,该参数是最先(包含)插进去和(或)删除的数组元素的下标,必需是数字。

参数howmany是必需的。划定应当删除若干元素。必需是数字,但可所以 “0″。如果未划定此参数,则删除从 index 最先到原数组末端的一切元素。

参数element1…elementX是可选的。划定要增加到数组的新元素,从 index 所指的下标处最先插进去。

splice() 要领可删除从 index 处最先的零个或多个元素,而且用参数列表中声明的一个或多个值来替代那些被删除的元素。如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

请注重slice()和splice()的区分:slice意义是切片,即把数组切出来一段;splice意义是绞接,如果接两根绳索,需要把本来的绳索切开,然后把新绳索和被切开的旧绳索的两段拼接在一同。如果想删除数组中的一段元素,并向数组增加新元素,应当运用要领Array.splice()

注重如果参数index不为数字,则会自动转换,详见示例:

var arr = ["George", "John", "Thomas", "James", "Adrew", "Martin"]
console.log(arr.splice(2, 1)); //["Thomas"]
console.log(arr); //["George", "John", "James", "Adrew", "Martin"]
console.log(arr.splice(2, 2, "William")); //["James", "Adrew"]
console.log(arr); //["George", "John", "William", "Martin"]
console.log(arr.splice(2, 1, "Tom", "Jerry")); //["William"]
console.log(arr); //["George", "John", "Tom", "Jerry", "Martin"]
console.log(arr.splice(2)); //["Tom", "Jerry", "Martin"]
console.log(arr); //["George", "John"]
console.log(arr.splice("2")); //[]
console.log(arr); //["George", "John"]
console.log(arr.splice("a")); //["George", "John"]
console.log(arr); //[]
11、toString()和toLocaleString()

toString() 要领可把数组转换为字符串,并返回效果。

Array.toString() 相当于 Array.join() ,返回值与没有参数的 join() 要领返回的字符串雷同。
toLocaleString() 把数组转换为当地字符串。返回值Array 的当地字符串示意。

转变原数组的要领:pop()、push()、reverse()、shift()、sort()、splice()、unshift()

不转变原数组的要领:concat()、join()、slice()、toString()、toLocaleString()

注重:JavaScript内里,没有好的机制来区分Array和Object,平常能够经由过程下面的要领来辨认数组:

var isArray = function(value){
  return Object.prototype.toString.apply(value) === '[object Array]';
}

Object.prototype.toString对任何变量会永久返回如许一个字符串“[object, class]”,而这个class就是JavaScript内嵌对象的组织函数的名字。至于用户自定义的变量,则class即是object。
因而经由过程Object.prototype.toString.apply(obj)能够正确的猎取变量数据范例。
经由过程Object.prototype.toString能够获得的数据范例包含:Date,Object,String,Number,Boolean,Regexp,Function,undefined,null,Math等。

ECMAScript 5定义了9个新的数组要领,有时机再写!

以上内容参考:[Feeldesign Studio ](http://www.feeldesignstudio.c…和JavaScript威望指南

感谢寓目,愿望大牛指点,小牛一同提高~

    原文作者:修行的苦行僧
    原文地址: https://segmentfault.com/a/1190000009090626
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞