JS数组的基础知识,包括js数组的属性与方法,js数组常常遇到的一些问题,通过查阅一些网上的知识,把关于数组的东西进行了罗列.
数组属性
length
length属性表示数组的长度,即其中元素的个数。
JavaScript数组的length属性是可变的,当length属性被设置得更大时,整个数组的状态事实上不会发生变化,仅仅是length属性变大;当length属性被设置得比原来小时,则原先数组中索引大于或等于length的元素的值全部被丢失。
prototype
返回对象类型原型的引用。prototype 属性是 object 共有的。
一般用来给数组实例添加方法。
constructor
表示创建对象的函数。
说明:constructor 属性是所有具有 prototype 的对象的成员。constructor 属性保存了对构造特定对象实例的函数的引用。
基本操作
创建数组
// 数组实例的创建
var arr = [];//创建空数组
var arr = [1,"{1,2}","string"];//创建一个数组并赋值
var arr = new Array(); //创建一个空数组 []
var arr = new Array(5); //创建一个length为5的数组 [undefined, undefined, undefined, undefined, undefined]
var arr = new Array(1,2,3,4,5); //创建数组并赋值 [1,2,3,4,5]
var arr = Array.of(7); // 创建数组并赋值 [7]
var arr = Array.of(1, 2, 3); // 创建数组并赋值 [1, 2, 3]
检测数组
//判断一个对象是不是数组
var arr = [1,8,9];
/*
方法一 instanceof是Java、php的一个二元操作符(运算符),和==,>,<是同一类东西,它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据
*/
if(arr instanceof Array){}
/*
方法二 prototype 属性使您有能力向对象添加属性和方法
*/
if(Object.prototype.toString.call(arr) == '[object Array]')}{}
//方法三 这种是最常用的方法
if(Array.isArray(arr)){}
/*
方法四 constructor 属性返回对创建此对象的数组函数的引用,Construction代表类中的一个构造方法,这个方法封装了类的定义
*/
if(arr.constructor == Array){}
数组方法
① isArray()
Array.isArray(obj) 检测对象是否 Array(数组) ,是则返回true,否则为false。
② from()
Array.from(arrayLike, mapFn, thisArg)
该方法从一个类似数组或可迭代对象创建一个新的数组实例。参数 arrayLike 是想要转换成真实数组的类数组对象或可遍历对象。mapFn是可选参数,如果指定了该参数,则最后生成的数组会经过该函数的加工处理后再返回。thisArg是可选参数,为执行 mapFn 函数时 this的值。
所谓类似数组的对象,本质特征只有一点,即必须有length属性。因此,任何有length属性的对象,都可以通过Array.from方法转为数组。见下面的小例子:
var arrayLike = {
0: 'a',
1: 'b',
2: 'c',
length: 3
}
var arrayLike2 = {length: 3}
var str = 'abcd'
var newArray = Array.from(arrayLike) //['a', 'b', 'c']
var newArray2 = Array.from(arrayLike2) // [undefined, undefined, undefined]
var newArray3 = Array.from(str) // ['a', 'b', 'c', 'd']
console.log(newArray);
console.log(newArray2);
console.log(newArray3);
③ of();
Array.of(item,.....) 该方法用于创建数组实例。该方法用于替代 Array() 或 new Array()。Array.of() 和 Array 构造函数之间的区别在于处理整数参数:Array.of(7) 创建一个具有单个元素 7 的数组,而 Array(7) 创建一个包含 7 个 undefined 元素的数组。
eg:
var a1 = Array(7);
var a2 = Array(1,2,12);
var a3 = Array.of(7);
var a4 =Array.of(1,2,12);
console.log(a1);
console.log(a2);
console.log(a3);
console.log(a4);
数组实例方法
数组的转换
① 数组转换成字符串 Array.join(separator);.
把数组转换成字符串,先把数组中的每个元素转换成字符串,然后再用 separator 分隔符把它们链接在一起,separator 分隔符默认是逗号 “,”,要想做到无间隔链接,可以使用空字符串作为 separator:见下面的例子:
var arr = [1,2,3,4,5]
//默认符号 ","
var a1 = arr.join();//1,2,3,4,5
//自定义符号“ | ”
var a2=arr.join('|') //"1|2|3|4|5"
// 没有符号,用空字符串
var a3=arr.join("") //12345
console.log(a1);
console.log(a2);
console.log(a3);
② 字符串转换成数组 a.split();
var arr = [1,2,3,4,5]
//arr 转换成字符串并赋值给 a
var a = arr.join();
// 再把 a 转换成 数组,并用“ , ”隔开
var b = a.split(",");
console.log(b);
栈方法 (push pop)
1.Array.push(item......)将一个或多个新元素添加到数组结尾,并返回数组新长度。
var arr = ["Orange","Apple"];
var a = arr.push("banana","Mango");
console.log(a);//返回数值长度为 4
2.Array.pop() 移除最后一个元素并返回该元素值。
var arr = ["Orange","Apple"];
var a = arr.pop();
console.log(a);// 移除最后一个元素 返回最后一个值Apple
队列方法 (unshift shift)
Array.unshift(item...);将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度。
var arr = ["Orange","Apple"];
var a = arr.unshift("banana");
console.log(a);// 返回新数组的长度为 3
Array.shifit();移除最前一个元素并返回该元素值,数组中元素自动前移.如果这个数组是空的,它会返回undefined。shift 通常比 pop 慢的多。
var arr = ["Orange","Apple","banana"];
var arr1 = [];
var a1 = arr1.shift();
var a2 = arr.shift();
console.log(a1);// 空数组返回undefined
console.log(a2);// 移除第一个元素,并返回该元素 Orange
console.log(a2);// 移除第一个元素,并返回该元素 Orange
重排序方法(reverse, sort)
Array.reverse() 颠倒数组的顺序
var arr = ["Orange","Apple","banana"];
var a = arr.reverse();
console.log(a);
Array.sort() 给数组排序, 默认升序。 sort 默认会将数组内容视为字符串来排序,所以对数字排序时默认的排序规则会错的离谱,看下面的例子是怎么错的:
var arr = [2,4,10,6,8,20];
var a = arr.sort();
console.log(a);
解决这种按照字符串来排序的方法就是给sort带入个比较函数来替代原来默认的比较方法,比较方法接受两个参数,如果两个参数相等则返回0,如果第一个参数应该排在前面则返回一个负数,如果第二个参数应该排在前面则返回一个正数:
var arr = [2,4,10,6,8,20];
var a = arr.sort(function(a,b){
return a-b;
});
console.log(a);