Js数组Array方法

本文详细介绍了JavaScript中Array对象的静态方法和实例方法,包括Array.isArray()、valueof()、toString()、push()、pop()、shift()、unshift()、join()、concat()、reverse()、slice()、splice()、sort()、map()、forEach()、filter()、some()、every()、reduce()和reduceRight()等,涵盖了数组操作的各种场景。同时,还特别提到了sort()方法的自定义排序功能和reduce方法的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态方法:

  1. Array.isArray(arr):返回一个布尔值,判断arr是否是数组,可以弥补typeof运算符的不足

实例方法:

  1. valueof(),toString():valueof()返回数组本身;toString()返回数组的字符串形式;
  2. push(),pop():push可以在字符串末尾添加一个或多个元素,并返回新原数组的长度;pop()删除并返回数组最后一个元素;
  3. shift(),unshift():shift()用于删除并返回数组的第一个元素;unshift()在数组第一个位置添加元素并返回新数组的长度;
  4. join():以指定参数作为分隔符,将数组成员连接为一个字符串返回,如果不提供参数,默认用逗号分隔;null或undefined或空位会被转换成空字符串;
  5. concat():用来合并新数组,也可添加其它类型值作为参数;arr1.concat(arr2,arr3);arr4.concat(1,2);arr5.concat(obj1,obj2);此处新数组对象相当于引用。当原对象改变,数组跟着改变;
  6. reverse():将数组倒叙;
  7. slice():提取原数组的一部分,返回一个新数组,原数组不变;arr.slice(start,end);
  8. splice():删除原数组的一部分成员,返回被删除的元素,且可以在删除位置添加新的数组成员,会改变原数组。arr.splice(start,删除个数,插入的新元素,新元素,);如果只有一个参数,则在参数指示位置分成两个数组,当不想删除只想插入时,将第二个参数至零;
  9. sort():对数组进行排序(按照字典顺序排序,所以101排在11前),改变原数组;也可自定义方法排序
[10111, 1101, 111].sort(function (a, b) {
  return a - b;
})
// [111, 1101, 10111]

上面代码中,sort的参数函数本身接受两个参数,表示进行比较的两个数组成员。如果该函数的返回值大于0,表示第一个成员排在第二个成员后面;其他情况下,都是第一个元素排在第二个元素前面。

[
  { 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 }
// ]

注意,自定义的排序函数应该返回数值,否则不同的浏览器可能有不同的实现,不能保证结果都一致。

// bad
[1, 4, 2, 6, 0, 6, 2, 6].sort((a, b) => a > b)

// good
[1, 4, 2, 6, 0, 6, 2, 6].sort((a, b) => a - b)

上面代码中,前一种排序算法返回的是布尔值,这是不推荐使用的。后一种是数值,才是更好的写法。

  1. map():参数是函数方法,用来遍历数组,将所有成员依次传入相应参数函数,将每次执行结果组成一个新数组返回,原数组不变,可向方法调用函数传入三个参数,当前成员,当前位置,数组本身;
  2. forEach():和map类似,不返回值,原数组不变;
  3. filter():过滤数组,参数是函数方法,用来返回新数组,原数组不变;,可向方法调用函数传入三个参数,当前成员,当前位置,数组本身;
  4. some(),every():两个方法类似断言(assert),返回一个布尔值,表示判断数组成员是否满足某个条件;用函数作参数,数组成员依次执行该函数,该函数接收三参数(item,index,arr)返回一个布尔值;some方法只要一个为true则为true;every则是全部满足才返回true;
  5. reduce(),reduceRight():依次处理数组成员,累计为一个值,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

reduce方法和reduceRight方法的第一个参数都是一个函数。该函数接受以下四个参数。

  • 累积变量,默认为数组的第一个成员
  • 当前变量,默认为数组的第二个成员
  • 当前位置(从0开始)
  • 原数组

这四个参数之中,只有前两个是必须的,后两个则是可选的。
如果要对累积变量指定初值,可以把它放在reduce方法和reduceRight方法的第二个参数。

  1. indexOf(),lastIndexOf():indexOf()返回元素在数组第一次出现的位置,如果没有出现则返回-1,可加第二个参数表示开始搜素的位置;lastIndexOf()返回元素数组最后一次出来的位置,没有则返回-1;
  2. 链式使用
var users = [
  {name: 'tom', email: 'tom@example.com'},
  {name: 'peter', email: 'peter@example.com'}
];

users
.map(function (user) {
  return user.email;
})
.filter(function (email) {
  return /^t/.test(email);
})
.forEach(function (email) {
  console.log(email);
});
// "tom@example.com"

上面代码中,先产生一个所有 Email 地址组成的数组,然后再过滤出以t开头的 Email 地址,最后将它打印出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值