array

2019-05-09  本文已影响0人  枣阳黄小明
array是js原生对象,同时也是一个构造函数,可以用他生成新的数组,(一般不要用,参数不同结果有差异)
var arr=new Array(2);
arr.length // 2
arr // [ empty x 2 ]

静态方法 Array.isArray();

Array.isArray();方法返回一个布尔值,表示参数是否是数组,它可以弥补typeof运算符的不足。

实例方法

valueOf();toString();

valueOf方法是一个所有对象都拥有的方法,表示该对象求值。不同对象的valueOf方法不尽一致,数组的valueOf方法返回数组本身

var arr=[1,2,3];
arr.valueOf();//[1,2,3]

toString方法也是对象的通用方法,数组的toString方法返回数组的字符串形式。

var arr=[1,2,3];
arr.toString();//"1,2,3"
var arr=[1,2,3,[4,5,6]];
arr.toString();//"1,2,3,4,5,6"

push();pop();

push方法用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度,注意,该方法会改变原数组

var arr=[];
arr.push(1);//1
arr.push('a');//2
arr.push(true,{})//4
arr //[1,'a',true,{}]

pop方法用于删除数组的最后一个元素,并返回该元素,改变原素组

var arr=['a','b','c'];
arr.pop();//'c'
arr //['a','b']

对空数组使用pop方法,不报错,undefined

后进先出

shift(),unshift()

shift()方法用于删除数组的第一个元素,并返回该元素。注意,该方法会改变原数组。

var a = ['a', 'b', 'c'];
a.shift() // 'a'
a // ['b', 'c']

shift()方法可以遍历并清空一个数组。

var list = [1, 2, 3, 4];
var item;
while (item = list.shift()) {
  console.log(item);
}
list // []   并不可靠,判断0的问题

push()和shift()结合使用,就构成了“先进先出”的队列结构(queue)。

unshift()方法用于在数组的第一个位置添加元素,并返回添加新元素后的数组长度。注意,该方法会改变原数组。

var a = ['a', 'b', 'c'];
a.unshift('x'); // 4
a // ['x', 'a', 'b', 'c']

unshift()方法可以接受多个参数,这些参数都会添加到目标数组头部。

var arr = [ 'c', 'd' ];
arr.unshift('a', 'b') // 4
arr // [ 'a', 'b', 'c', 'd' ]

join()

join()方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。

var a = [1, 2, 3, 4];
a.join(' ') // '1 2 3 4'
a.join(' | ') // "1 | 2 | 3 | 4"
a.join() // "1,2,3,4"

如果数组成员是undefined或null或空位,会被转成空字符串。

[undefined, null].join('#')
// '#'
['a',, 'b'].join('-')
// 'a--b'

通过call方法,这个方法也可以用于字符串或类似数组的对象。

Array.prototype.join.call('hello', '-')
// "h-e-l-l-o"

var obj = { 0: 'a', 1: 'b', length: 2 };
Array.prototype.join.call(obj, '-')
// 'a-b'

concat()

concat方法用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变。

['hello'].concat(['world'])
// ["hello", "world"]

['hello'].concat(['world'], ['!'])
// ["hello", "world", "!"]

[].concat({a: 1}, {b: 2})
// [{ a: 1 }, { b: 2 }]

[2].concat({a: 1})
// [2, {a: 1}]

除了数组作为参数,concat也接受其他类型的值作为参数,添加到目标数组尾部。

[1, 2, 3].concat(4, 5, 6)
// [1, 2, 3, 4, 5, 6]

如果数组成员包括对象,concat方法返回当前数组的一个浅拷贝。所谓“浅拷贝”,指的是新数组拷贝的是对象的引用。

var obj = { a: 1 };
var oldArray = [obj];

var newArray = oldArray.concat();

obj.a = 2;
newArray[0].a // 2

reverse()

reverse方法用于颠倒排列数组元素,返回改变后的数组。注意,该方法将改变原数组。

var a = ['a', 'b', 'c'];

a.reverse() // ["c", "b", "a"]
a // ["c", "b", "a"]

slice()

slice方法用于提取目标数组的一部分,返回一个新数组,原数组不变。

arr.slice(start, end);

slice方法的一个重要应用,是将类似数组的对象转为真正的数组。

Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })
// ['a', 'b']

Array.prototype.slice.call(document.querySelectorAll("div"));
Array.prototype.slice.call(arguments);

splice()

splice方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。注意,该方法会改变原数组。

arr.splice(start, count, addElement1, addElement2, ...);
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2) // ["e", "f"]
a // ["a", "b", "c", "d"]
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2, 1, 2) // ["e", "f"]
a // ["a", "b", "c", "d", 1, 2]

如果只是单纯地插入元素,splice方法的第二个参数可以设为0。

var a = [1, 1, 1];

a.splice(1, 0, 2) // []
a // [1, 2, 1, 1]

如果只提供第一个参数,等同于将原数组在指定位置拆分成两个数组。

var a = [1, 2, 3, 4];
a.splice(2) // [3, 4]
a // [1, 2]

sort()

sort方法对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。

['d', 'c', 'b', 'a'].sort()
// ['a', 'b', 'c', 'd']

[4, 3, 2, 1].sort()
// [1, 2, 3, 4]

[11, 101].sort()
// [101, 11]

[10111, 1101, 111].sort()
// [10111, 1101, 111]

如果想让sort方法按照自定义方式排序,可以传入一个函数作为参数。

[10111, 1101, 111].sort(function (a, b) {
  return a - b;
})
// [111, 1101, 10111]

map()

map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。

var numbers = [1, 2, 3];

numbers.map(function (n) {
  return n + 1;
});
// [2, 3, 4]

numbers
// [1, 2, 3]

map方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。

[1, 2, 3].map(function(elem, index, arr) {
  return elem * index;
});
// [0, 2, 6]

map方法还可以接受第二个参数,用来绑定回调函数内部的this变量(详见《this 变量》一章)。

var arr = ['a', 'b', 'c'];

[1, 2].map(function (e) {
  return this[e];
}, arr)
// ['b', 'c']
1-Object.assign() :实现的是对对象的浅拷贝。返回值是新生成的对象,通常用于对象的合并,相同的属性后者会覆盖前者。
2-RegExpObject.exec() :如果exec()找到了匹配的文本,则返回一个结果数组。否则返回null。此数组的第0个元素是正则表达式相匹配的文本
3-array.entrise():entries() 方法返回一个数组的迭代对象,该对象包含数组的键值对(key/value).迭代对象中数组的索引值作为key数组元素作为value
4-Set()和Map() :Map() 接受一个二维数组,key/value形式存储,Set() 一维数组,可以用来去重
5-fill():数组初始化的时候义可以用来填充初始值
上一篇下一篇

猜你喜欢

热点阅读