【标准库】数组

数组 也是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 返回截取的部分(操作后的)

你可能感兴趣的:(【标准库】数组)