🐋成员文章

JavaScript基础学习-数组方法

2017-02-15  本文已影响24人  不是王小贱

Array中的方法

四个方面去学习数组的方法

注意: 类数组:类似于数组,但不是数组。有length属性

1、通过getElementsByTagName获取的元素集合是类数组
2、函数中的实参集合arguments也是类数组

数组中的方法分类

一、增加、删除、修改

ary.push()

其他类似方法:ary[ary.length]=value; ary.splice(ary.length-1,0,value)

ary.pop()

其他类似方法:ary.length--; ary.splice(ary.lenght-1,1)

ary.shift()

ary.unshift()

其他类似方法:ary.splice(0,0,x)

ary.splice()

可以实现增删改

删除功能 ary.splice(n,m)
  • 只传n值:从n开始删除到末尾
  • n=0:将原有数组删除,克隆一个一模一样的数组返回
  • 删除一项:ary.splice(n,1),删除索引为n的这一项
  • 删除从索引n到索引为m之间的值,splice(n,(m-n)+1)
替换功能 ary.splice(n,m,x)
增加功能 ary.splice(n,0,x)

数组的截取和拼接

截取 ary.slice(n.m)
  • 如果只有一个参数ary.slice(n)---从索引n开始找到末尾
  • slice(0)/slice()----克隆一份,原数组不变
  • 获取数组中第n项到第m项的数组,原有数组不变----slice(n-1,m)
  • 从索引n开始,截取m个。slice(n,n+m)
  • Array.prototype.slice.call(arg) 可以将一个类数组转换成数组 但不可以是元素集合
  • slice截取是浅拷贝:意思就是,数组中如果有引用数据类型,这时截取出来的是一个空间地址,而不是具体的值。如果在之后,对这个引用数据进行改变。则对应的截取出来的值也会变化
拼接 ary.concat()
  • 当不传递参数的时候,克隆一份
    利用push可以实现数组的合并
  var array = ["football", "basketball"];
var array2 = ["volleyball", "golfball"];
var i = Array.prototype.push.apply(array,array2);
console.log(array); // ["football", "basketball", "volleyball", "golfball"]
console.log(i); // 4

将数组转变为字符串

ary.toString()

当数组直接和字符串作连接操作时,将会自动调用其toString()方法。

  var str = ['aa', 'bb', 'cc', 'dd'] + ',ee';
console.log(str); // "aa,bb,cc,dd,ee"
ary.join()

排序

ary.sort()
  • 数组从小到大排序 ary.sort(function(a,b){ return a-b})
  • 数组从大到小排序 ary.sort(function(a,b){ return b-a})
  • 如果数组的内容不是数字,而是字母或者是汉字
    ary.sort(function(a,b){return a.localCompare(b)})
ary.revers()

不兼容的方法

indexOf()
lastIndexOf()

ES6新增的构造函数方法

构造器相关API

Array.of

Array.of用于将参数一次转化为数组中的一项,然后返回这个新数组,而不管这个参数是数字还是其他。它基本上与Array构造器功能一致,唯一的区别就在单个参数的处理。

与Array的不同
    Array.of(8); // [8]
    Array(8); // [undefined x 8]。在Array的单个参数为数字时,创建一个数组长度为传进来的数值的数组,每一项都为undefined.

Array.from

语法:Array.from(arrayLike[, processingFn[, thisArg]])

可以从一个类似数组的可迭代对象创建一个新的数组实例,返回一个新的数组,并不改变原数组。

其拥有三个参数,第一个为类似数组的对象,必选。第二个为加工函数,新生的数组会经过该函数的加工再返回。第三个为this作用域,表示加工函数执行时this的值。

当适用加工函数时,默认会有两个形参,值和索引。并且必须明确指定返回值,否则将隐式的返回undefined

拥有迭代器的对象还包括:String、Set、Map、arguments。

Array.isArray()

判断一个变量是否是一个数组。判断是否是一个数组的方法:

 var a = [];
// 1.基于instanceof
a instanceof Array;
// 2.基于constructor
a.constructor === Array;
// 3.基于Object.prototype.isPrototypeOf
Array.prototype.isPrototypeOf(a);
// 4.基于getPrototypeOf
Object.getPrototypeOf(a) === Array.prototype;
// 5.基于Object.prototype.toString
Object.prototype.toString.apply(a) === '[object Array]';

除了第五种,其他都不可靠。

prototype原型上的方法

改变自身的方法

copyWithin方法

用于数组内元素之间的替换,即替换的元素和被替换元素均是数组内的元素。

语法:arr.copyWithin(target, start[, end = this.length])

taget指定被替换元素的索引,start指定替换元素起始的索引,end可选,指的是替换元素结束位置的索引。

如果start为负,则其指定的索引位置等同于length+start,length为数组的长度。end也是如此

注意: 目前只有FireFox(32以上)实现了该方法。

var array = [1,2,3,4,5]; 
var array2 = array.copyWithin(0,3);
console.log(array===array2,array2); // true [4, 5, 3, 4, 5]
var array = [1,2,3,4,5]; 
console.log(array.copyWithin(0,3,4)); // [4, 2, 3, 4, 5]
var array = [1,2,3,4,5]; 
console.log(array.copyWithin(0,-2,-1)); // [4, 2, 3, 4, 5]
fill方法

与copyWidthin类似,不同之处就是,它主要用于将数组指定区间内的元素替换为某个值。

不改变自身的方法

includes(ES7)

它用来判断当前数组是否包含某个特定的值,如果是则返回true,否则返回false.

语法:arr.includes(element, fromIndex=0)

element为需要查找的元素

fromIndex表示从该索引位置开始查找element,缺省为0,它是正向查找,即从索引处往数组末尾查找。

与indexOf方法的区别就是includes可以发现NaN.

var array = [NaN];
console.log(array.includes(NaN)); // true
console.log(arra.indexOf(NaN)>-1); // false

引用来源

【深度长文】JavaScript数组所有API全解密-->路易斯

上一篇 下一篇

猜你喜欢

热点阅读