数组 也是Js
原生对象
- 声明一个对象 最好是使用字面量赋值 这样做的原因是 使用构造函数 不同参数,行为不一致
// bad
var arr = new Array(1, 2);
// good
var arr = [1, 2];
var a = new Array(3);
var b = [undefined, undefined, undefined];
a.length // 3
b.length // 3
a[0] // undefined
b[0] // undefined
0 in a // false
0 in b // true
- 识别是不是数组 Array.isArray(arr);
-
push
pop
后进先出 修改会影响数组 堆栈 返回为之后的长度
[].pop() // undefined
-
shift
unshifit
先进先出 修改会影响数组 队列 -
join()
以指定参数作为分隔符,将所有数组返回字符串
// 还可以通过`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
多数组合并,相比push
不会修改原数组返回一个新数组, 而且会把添加的打散 添加 而push
是直接添加
a.concat([1,2,3])
(6) [1, {…}, Array(2), 1, 2, 3]
-
reverse()
用于颠倒数组排序,会修改数组 -
slice
切分目标数组,原数组不变 a.slice() 相当于复制
// 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
相对slice
splice
会修改原数组splice
返回是扔掉的一截 还可以用与插值
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2) // ["e", "f"]
a // ["a", "b", "c", "d"]
var a = [1, 1, 1];
a.splice(1, 0, 2) // []
a // [1, 2, 1, 1]
-
sort
按照字典排序,如果传入比较函数的话 按照自定义函数 排序
[
{ name: "张三", age: 30 },
{ name: "李四", age: 24 },
{ name: "王五", age: 28 }
].sort(function (o1, o2) {
return o1.age - o2.age;
})
// [
// { name: "李四", age: 24 },
// { name: "王五", age: 28 },
// { name: "张三", age: 30 }
// ]
-
map
一个参数为函数的时候 传入三个参数: 当前成员、当前位置、数组本身
[1, 2, 3].map(function(elem, index, arr) {
return elem * index;
});
map
一个参数为函数,第二参数为跳掉函数内部this变量
var arr = ['a', 'b', 'c'];
[1, 2].map(function (e) {
return this[e];
}, arr)
// ['b', 'c']
-
foreach
对比map
map是放回操作后的数组,foreach
没有返回值 其他基本都一样
所以如果需要操作数组的话 ,获取修改后的返回数组的话 建议使用map
foreach使用的话还会跳过空值 -
filter
过滤数组成员,满足对象的成员形成一个新的数组返回,不会修改原来的数组
[1, 2, 3, 4, 5].filter(function (elem) {
return (elem > 3);
})
// [4, 5]
-
some
every
你断言 参数操作同map -
reduce
reduceRight
累积操作一个是自左 一个是自右
[1, 2, 3, 4, 5].reduce(function (a, b) {
console.log(a, b);
return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后结果:15
-
indexOf()
lastIndexOf()
第二个参数是开始搜索的位置 - 链式操作
- 总结
会在原数组上面操作的是push
pop
shift
unshift
reverse
splice
sort
-
push
unshift
返回操作后的数组长度 -
pop
shift
返回出来的元素 -
splice
返回截取的部分(操作后的)