javascript--18---数组的遍历与去重

严格模式

在es5引入 为了让团队开发更为便利 严谨

  1. 变量必须在声明之后才能使用
"use strict"
a=1;
console.log(a);

结果会直接报错

  1. 函数的参数不能同名
"use strict"
function f(a,a,b) {
    
}

结果会直接报错

  1. 不能对只读的属性赋值 否则会报错
"use strict";
var str ="123";
str.length =1;//可读不可写
console.log(str.length)
  1. 不能删除不可删除的属性 否则会报错
"use strict";
  delete str.length;//不可删除
  console.log(str.length);
  1. delete 只能删除属性 不能删除变量
var str ="123";
delete  str;
console.log(str);
  1. 不能使用前缀0表示八进制 否则会报错
var num =076;
      console.log(num);

结果是62 加严格模式报错 在ES6中 8进制的前导值变为0o

var num =0x21;
      console.log(num);

16进制表示方法 33

var num =0b1001;
      console.log(num);

2进制表示方法 9

如果要进制转换怎么办

var num =0b1001;
      console.log(num.toString(8));

将二进制转换为8进制 用toString

  1. eval 和arguments不能被重新赋值
function add() {
          arguments = 3;
          console.log(arguments);
      }
      add(1,2,3);

结果变为3 不合适 在严格模式下会报错

  1. 不能使用arguments.callee
  2. 不能使用arguments.callee.caller 函数的调用栈(谁调用这个函数 全局当中调用 caller是null)
function add() {
         b();
      }
      function b(){
          console.log(arguments.callee.caller);
      }
      add(1,2,3);

结果是 add caller就是谁调用b指向谁

  1. 禁止this 指向全局对象
  2. 增加了保留字 如protected static interface

使用严格模式需要注意什么

  1. 禁止在全局使用严格模式 有些浏览器不支持严格模式 有些代码也必须在非严格模式下书写 使用时应该在函数内部书写
function fn() {
            "use strict";
        }

use strict也有作用域之分

  1. 如果希望在多个函数使用 但是不想多次写use strict
(function () {
            "use strict";
            function fn(){
                
            }
            function fn2(){
                
            }
        })();

数组排序

  1. 判断是否时数组 Array.isArray()
function add() {
        console.log(Array.isArray(arguments));
    }
    add(1,2,3);

结果是false

function add() {
        var arr =[];
        for (var i=0;i<arguments.length;i++){//argumentslength属性
            arr[i] = arguments[i];
        } 
        console.log(arr)
    }
    add(1,2,3);

将123保存进去并打印

function add() {
        var arr = [].slice.call(arguments, 0);//改变了指向  指向arguments
        console.log(arr)
    };

在argument当中 长的像数组的只有123 下面是劫不出来 这就是js的灵活地方

  1. 颠倒数组用reverse
var arr =[1,2,3];
arr.reverse();
console.log(arr);

结果是【3,2,1】

  1. 数组排序 sort() 按照ASCII排序 unicode码点进行排序 从小到达排 会改变原数组
var arr =[156,14,21,2];
    console.log(arr.sort())

结果是[14, 156, 2, 21]

var arr =["lisi","wangwu","zhaoliu","qianqi"];
    console.log(arr.sort())

["lisi", "qianqi", "wangwu", "zhaoliu"]先比较字符串的第一位

自定义排序

  1. 回调函数 参数作为一个函数体 在方法执行的时候 函数执行
var arr =[156,14,21,2];
  arr.sort(function (a,b) {//每次都接受两个值 当前值和下一个值
      return a-b;//性能很低
  })
  console.log(arr);

结果是[2, 14, 21, 156] 如果a-b>0,表示a>b 交换位置 如果a-b<0,表示a<b 不交换位置 如果a-b=0, 不交换位置

  1. 大到小排序
var arr =[156,14,21,2];
  arr.sort(function (a,b) {//每次都接受两个值 当前值和下一个值
      return b-a;//性能很低
  })
  console.log(arr);

遍历数组的方法

  1. filter 过滤器 不改变原数组 返回一个新数组 参数是一个函数 通过自定义的过滤方法返回新的数组
var arr =[12,5,8,123,222];
    var arr1 = arr.filter(function () {
        return true;
    })
  console.log(arr1);

[12, 5, 8, 123, 222] 返回原数组 就是返回值是true就返回该数值

var arr =[12,5,8,123,222];
    var arr1 = arr.filter(function () {
       console.log(arguments);
    })
  console.log(arr1);

里面的arguments 第一个是数组的一个值 第二个是索引 第三个是数组本身

var arr =[12,5,8,123,222];
    var arr1 = arr.filter(function (item) {
      return item>12;//表示每次循环我都判断第一个值是不是大于12 将大于的值给arr1
    })
  console.log(arr1);

结果是 123 222

var stu=[//想要找到大于20的放入新的数组
        {name:"lisi",age:"20"},
        {name:"lily",age:"18"},
        {name:"lucy",age:"22"},
        {name:"hmm",age:"30"},
    ]
  var stu1 = stu.filter(function (item) {
      return item.age>20;
  })
  console.log(stu1);

结果是0: {name: "lucy", age: "22"}1: {name: "hmm", age: "30"}length: 2__proto__: Array(0)

  1. map遍历数组 由回调执处理之后的一个新的返回值组成的数组
var arr =[1,4,9];
  var num =[];
  for (var i=0;i<3;i++){
      num[i] = Math.sqrt(arr[i]);//将数组中的值开平方
  }
  console.log(num)

结果是123

var arr =[1,4,9];
  var num = arr.map(Math.sqrt);
  console.log(num);
  1. forEach 通过回调处理数组中的所有参数 没有返回值 就是每走一步执行一个函数 没有改变原数组
var arr =[1,4,9];
  arr.forEach(function (item,index,array) {
      console.log(`a[${index}]=${item}`);//结果是a[0]=1 a[1]=4 a[2]=9
  })
console.log(arr);//149
  1. every所有为真则为真 some有一个为真则为真 针对所有回调函数的返回值 如果全为true 最终结果为true
var arr = [1,2,3,4]//如果所有的数为偶数则返回true
var bool = arr.every(function (item) {
      return item%2 ==0;//接受布尔值为返回值 如果全是true 那么最终结果是true
  })
  console.log(bool)

结果是false

数组去重

var arr =["lisi","lucy","lily","hmm","lisi","hmm"]//将数组中重复的单元去除
  var arr1 = arr.filter(function (item,index,array) {
      return array.indexOf(item) === index;//如果是true 返回当前元素
  })
  1. for循环做数组去重

严格模式

在es5引入 为了让团队开发更为便利 严谨

  1. 变量必须在声明之后才能使用
"use strict"
a=1;
console.log(a);

结果会直接报错

  1. 函数的参数不能同名
"use strict"
function f(a,a,b) {
    
}

结果会直接报错

  1. 不能对只读的属性赋值 否则会报错
"use strict";
var str ="123";
str.length =1;//可读不可写
console.log(str.length)
  1. 不能删除不可删除的属性 否则会报错
"use strict";
  delete str.length;//不可删除
  console.log(str.length);
  1. delete 只能删除属性 不能删除变量
var str ="123";
delete  str;
console.log(str);
  1. 不能使用前缀0表示八进制 否则会报错
var num =076;
      console.log(num);

结果是62 加严格模式报错 在ES6中 8进制的前导值变为0o

var num =0x21;
      console.log(num);

16进制表示方法 33

var num =0b1001;
      console.log(num);

2进制表示方法 9

如果要进制转换怎么办

var num =0b1001;
      console.log(num.toString(8));

将二进制转换为8进制 用toString

  1. eval 和arguments不能被重新赋值
function add() {
          arguments = 3;
          console.log(arguments);
      }
      add(1,2,3);

结果变为3 不合适 在严格模式下会报错

  1. 不能使用arguments.callee
  2. 不能使用arguments.callee.caller 函数的调用栈(谁调用这个函数 全局当中调用 caller是null)
function add() {
         b();
      }
      function b(){
          console.log(arguments.callee.caller);
      }
      add(1,2,3);

结果是 add caller就是谁调用b指向谁

  1. 禁止this 指向全局对象
  2. 增加了保留字 如protected static interface

使用严格模式需要注意什么

  1. 禁止在全局使用严格模式 有些浏览器不支持严格模式 有些代码也必须在非严格模式下书写 使用时应该在函数内部书写
function fn() {
            "use strict";
        }

use strict也有作用域之分

  1. 如果希望在多个函数使用 但是不想多次写use strict
(function () {
            "use strict";
            function fn(){
                
            }
            function fn2(){
                
            }
        })();

数组排序

  1. 判断是否时数组 Array.isArray()
function add() {
        console.log(Array.isArray(arguments));
    }
    add(1,2,3);

结果是false

function add() {
        var arr =[];
        for (var i=0;i<arguments.length;i++){//argumentslength属性
            arr[i] = arguments[i];
        } 
        console.log(arr)
    }
    add(1,2,3);

将123保存进去并打印

function add() {
        var arr = [].slice.call(arguments, 0);//改变了指向  指向arguments
        console.log(arr)
    };

在argument当中 长的像数组的只有123 下面是劫不出来 这就是js的灵活地方

  1. 颠倒数组用reverse
var arr =[1,2,3];
arr.reverse();
console.log(arr);

结果是【3,2,1】

  1. 数组排序 sort() 按照ASCII排序 unicode码点进行排序 从小到达排 会改变原数组
var arr =[156,14,21,2];
    console.log(arr.sort())

结果是[14, 156, 2, 21]

var arr =["lisi","wangwu","zhaoliu","qianqi"];
    console.log(arr.sort())

["lisi", "qianqi", "wangwu", "zhaoliu"]先比较字符串的第一位

自定义排序

  1. 回调函数 参数作为一个函数体 在方法执行的时候 函数执行
var arr =[156,14,21,2];
  arr.sort(function (a,b) {//每次都接受两个值 当前值和下一个值
      return a-b;//性能很低
  })
  console.log(arr);

结果是[2, 14, 21, 156] 如果a-b>0,表示a>b 交换位置 如果a-b<0,表示a<b 不交换位置 如果a-b=0, 不交换位置

  1. 大到小排序
var arr =[156,14,21,2];
  arr.sort(function (a,b) {//每次都接受两个值 当前值和下一个值
      return b-a;//性能很低
  })
  console.log(arr);

遍历数组的方法

  1. filter 过滤器 不改变原数组 返回一个新数组 参数是一个函数 通过自定义的过滤方法返回新的数组
var arr =[12,5,8,123,222];
    var arr1 = arr.filter(function () {
        return true;
    })
  console.log(arr1);

[12, 5, 8, 123, 222] 返回原数组 就是返回值是true就返回该数值

var arr =[12,5,8,123,222];
    var arr1 = arr.filter(function () {
       console.log(arguments);
    })
  console.log(arr1);

里面的arguments 第一个是数组的一个值 第二个是索引 第三个是数组本身

var arr =[12,5,8,123,222];
    var arr1 = arr.filter(function (item) {
      return item>12;//表示每次循环我都判断第一个值是不是大于12 将大于的值给arr1
    })
  console.log(arr1);

结果是 123 222

var stu=[//想要找到大于20的放入新的数组
        {name:"lisi",age:"20"},
        {name:"lily",age:"18"},
        {name:"lucy",age:"22"},
        {name:"hmm",age:"30"},
    ]
  var stu1 = stu.filter(function (item) {
      return item.age>20;
  })
  console.log(stu1);

结果是0: {name: "lucy", age: "22"}1: {name: "hmm", age: "30"}length: 2__proto__: Array(0)

  1. map遍历数组 由回调执处理之后的一个新的返回值组成的数组
var arr =[1,4,9];
  var num =[];
  for (var i=0;i<3;i++){
      num[i] = Math.sqrt(arr[i]);//将数组中的值开平方
  }
  console.log(num)

结果是123

var arr =[1,4,9];
  var num = arr.map(Math.sqrt);
  console.log(num);
  1. forEach 通过回调处理数组中的所有参数 没有返回值 就是每走一步执行一个函数 没有改变原数组
var arr =[1,4,9];
  arr.forEach(function (item,index,array) {
      console.log(`a[${index}]=${item}`);//结果是a[0]=1 a[1]=4 a[2]=9
  })
console.log(arr);//149
  1. every所有为真则为真 some有一个为真则为真 针对所有回调函数的返回值 如果全为true 最终结果为true
var arr = [1,2,3,4]//如果所有的数为偶数则返回true
var bool = arr.every(function (item) {
      return item%2 ==0;//接受布尔值为返回值 如果全是true 那么最终结果是true
  })
  console.log(bool)

结果是false

数组去重

var arr =["lisi","lucy","lily","hmm","lisi","hmm"]//将数组中重复的单元去除
  var arr1 = arr.filter(function (item,index,array) {
      return array.indexOf(item) === index;//如果是true 返回当前元素
  })
  1. for循环做数组去重
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值