ECMAScript6-数组的扩展

数组的扩展

上一期我们讲解了函数扩展的相关内容,这一期我们开始讲解数组的相关内容。

  • 数组的遍历
  • for…of循环的使⽤实例
  • Array.from()
  • Array.of()
  • 数组实例的 find() 和 findIndex()
  • 数组实例的 some() 和 every()
  • 数组实例的 fill()


1、数组的遍历

传统方式:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script>
      let arr=[1,2,3];
      for (let i = 0; i < arr.length; i++) {
          console.log(arr[i]);
      }
  </script>
</body>
</html>

使用forin遍历数组:会将索引不是数字的也遍历出来

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script>
      let arr=[1,2,3];
      arr.name="123";
      for(let i in arr){
          console.log(arr[i])
      }
      /*
      1
      2
      3
      123
      * */
  </script>
</body>
</html>

使用foreach遍历数组:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script>
      let arr=[1,2,3];
      arr.name="123";
      arr.forEach(function (v){
          console.log(v)
      });
      /*
      1
      2
      3
      * */
  </script>
</body>
</html>

使用箭头函数遍历:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script>
      let arr=[1,2,3];
      arr.name="123";
      arr.forEach(value => console.log(value));
      /*
      1
      2
      3
      * */
  </script>
</body>
</html>

使用forof遍历数组:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script>
      let arr=[1,2,3];
      arr.name="123";
      for (let number of arr) {
          console.log(number)
      }
      /*
      1
      2
      3
      * */
  </script>
</body>
</html>

2、For…of循环的使用实例

  • for…of 语句创建⼀个循环来迭代可迭代的对象。
  • 在 ES6 中引⼊的 for…of 循环,以替代 for…in 和 forEach(),并⽀持新的迭代协议。
  • for…of 允许你遍历Arrays(数组),Strings(字符串),Maps(映射),Sets(集合)等可迭代的数据结构等。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script>
      //数组对象entries()⽅法返回⼀个数组的迭代对象,该对象包含数组的键值对(key/value)。
      //1.使⽤for...of遍历数组:
      let a = ['zhangsan','lisi','wangwu'];
      for(let [k,v] of a.entries()){
          console.log(k,v);
      }
      //0 "zhangsan"
      //1 "lisi"
      //1 "lisi"
      //2.使⽤for...of遍历Maps(映射)
      const iterable1 = new Map([['one','zhangsan'],['two','lisi'],
          ['three','wangwu']]);
      for (const [key, value] of iterable1) {
          console.log(`${key} -> ${value}`);
      }
      //one -> zhangsan
      //two -> lisi
      //three -> wangwu
      //Set(集合) 对象允许你存储任何类型的唯⼀值,这些值可以是原始值或对象。
      //3.使⽤for...of遍历Set(集合)
      const iterable2 = new Set([10,30,20,10,30]);
      for (const value of iterable2) {
          console.log(value);
      }
      //10
      //30
      //20
      //字符串⽤于以⽂本形式存储数据
      //4.使⽤for...of遍历字符串
      const iterable3 = 'Hello';
      for (const value of iterable3) {
          console.log(value);
      }
      //H
      //e
      //l
      //l
      //o
      //5.使⽤for...of遍历arguments Object(参数对象)
      function demo(){
          for(const arg of arguments) {
              console.log(arg);
          }
      }
      demo('a','b','c');
      //a
      //b
      //c
  </script>
</body>
</html>

3、Array.from()

  • Array.from()⽅法就是将⼀个类数组对象或者可遍历对象转换成⼀个真正的数组。
  • 格式:
    1.Array.from(arrayLike[, mapFn[, thisArg]])
    2.arrayLike:想要转换成数组的伪数组对象或可迭代对象
    3.mapFn:如果指定了该参数,新数组中的每个元素会执⾏该回调函数;
    4.thisArg:可选参数,执⾏回调函数 mapFn 时 this 对象。
  • 返回值:是⼀个新的数组实例(真正的数组)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script>
      let array = {
          0: 'name',
          1: 'age',
          2: 'sex',
          3: ['user1','user2','user3'],
          'length': 4
      };
      let arr = Array.from(array);
      console.log(arr); // ['name','age','sex',['user1','user2','user3']]

  </script>
</body>
</html>

Array.from()的案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Array.from()使⽤实例</title>
</head>
<body>
<ul>
    <li>zhangsan</li>
    <li>lisi</li>
    <li>wangwu</li>
</ul>
<script type="text/javascript">
    //获取上⾯的li节点对象列表
    let nlists = document.querySelectorAll("li");
    console.log(nlists); //NodeList(3) [li, li, li]
    //将NodeList列表对象转成数组,并解析出每个元素之间的内容。
    const alist = Array.from(nlists,li => li.textContent);
    console.log(alist); // ["zhangsan", "lisi", "wangwu"]
</script>
</body>
</html>

4、 Array.of()

Array.of()⽅法⽤于将⼀组值转化为数组,即新建数组,⽽不考虑参数的数量或类型。

//使⽤Array.of()创建数组
console.log(Array.of()); //[] 创建⼀个空数组
console.log(Array.of(8)); //[8] 创建只有⼀个元素值为8的数组
console.log(Array.of(1, 2, 3)); //[1,2,3] 创建⼀个值为1,2,3的数组
//以前直接使⽤Array创建数组
console.log(Array()); //[] 创建⼀个空数组
console.log(Array(4)); // [ , , , ] 创建拥有4个元素空值的数组
console.log(Array(1, 2, 3)); //[1,2,3] 创建⼀个值为1,2,3的数组

5、数组实例的 find() 和 findIndex()

  • find()⽅法,⽤于找出第⼀个符合条件的数组成员。
    1.参数是⼀个回调函数,所有数组成员依次执⾏该回调函数。
    2.直到找出第⼀个返回值为true的成员,然后返回该成员。
    3.如果没有符合条件的成员,则返回undefined。
  • findIndex()⽅法的⽤法与find⽅法⾮常类似,返回第⼀个符合条件的数组成员的位置。
    1.返回成员位置,如果所有成员都不符合条件,则返回-1。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script>
      const data =[
          {name:'zhangsan',age:22,sex:'man'},
          {name:'lisi',age:25,sex:'woman'},
          {name:'wangwu',age:23,sex:'man'},
      ];
      //使⽤find获取name属性值为lisi的信息
      let s1 = data.find(function(v){
          return v['name']=='lisi'
      });
      //同上效果使⽤箭头函数
      let s2 = data.find(v => v['name']=='lisi');
      console.log(s1); //{name: "lisi", age: 25, sex: "woman"}
      console.log(s2); //{name: "lisi", age: 25, sex: "woman"}
      //使⽤find获取name属性值为lisi的信息
      let s3 = data.findIndex(function(v){
          return v['name']=='lisi'
      });
      //同上效果使⽤箭头函数
      let s4 = data.findIndex(v => v['name']=='lisi');
      console.log(s3); //1
      console.log(s4); //1 

  </script>
</body>
</html>

6、数组实例的 some() 和 every()

  • every()和 some()⽬的:确定数组的所有成员是否满⾜指定的测试.
    1.some()⽅法 只要其中⼀个为true 就会返回true。
    2.every()⽅法必须所有都返回true才会返回true,哪怕有⼀个false,就会返回false。
  • 即:every:⼀假即假; some:⼀真即真。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <script>
      const data =[
          {name:'zhangsan',age:22,sex:'man'},
          {name:'lisi',age:25,sex:'woman'},
          {name:'wangwu',age:23,sex:'man'},
      ];
      //使⽤some判断data中是否含有⼀条name以"wang"开头的
      let s1 = data.some(v => v['name'].startsWith("wang"));
      console.log(s1); //true
      //使⽤every判断data信息中是否都是age⼤于20的信息。
      let s2 = data.every(v => v['age']>20);
      console.log(s2); //true 若有⼀个不符合则返回false
  </script>
</body>
</html>

7、数组实例的 .fill()

  • fill()函数,使⽤指定的元素替换原数组内容,会改变原来的数组。
  • 语法结构:arr.fill(value[, start[, end]])
    1.value:替换值。
    2.start:替换起始位置(数组的下标),可以省略。
    3.end:替换结束位置(数组的下标),如果省略不写就默认为数组结束。<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
//空数组则没有替换
console.log([].fill(6)); //[]
//将数组中的值都替换成指定值6
console.log([1,2,3].fill(6));//(3) [6, 6, 6]
//从数组索引位置2开始替换成指定值6,替换到数组结束位置。
console.log([1,2,3,4,5].fill(6,2)); //(5) [1, 2, 6, 6, 6]
//从数组索引位置2开始替换到索引位置4前结束。
console.log([1,2,3,4,5].fill(6,2,4)); //(5) [1, 2, 6, 6, 5]

总结

这期我们讲解了数组的扩展方面的内容,下期我们讲解Set和Map相关的知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值