欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

前端常用的JavaScript操作简介

程序员文章站 2022-04-18 21:21:48
> 落日夕霞的博客... > 前端常用的javascript操作 --> 前端常用的javascript操作 1.删除字符串中指定的一段字符...

    前端常用的javascript操作

    1.删除字符串中指定的一段字符

    例:删除"10km"中的km

    var str = "10km"
    
    //方法一:
    var res = str.replace('km', '')
    
    //方法二:
    var res = str.split('km').join('')
    //join方法不传参默认使用逗号作为分隔符
    

    2.数组去重

    var arr = [1, 2, 3, 1, 2]
    
    //方法一:
    var res = [...new set(arr)]
    
    //方法二:
    var res = array.from(new set(arr))
    
    //方法三:
    var res = [];
    for (var i in arr) {
    	if (res.indexof(arr[i] === -1) {
    		res.push(arr[i])
    	}
    }
    
    //方法四:
    var res = []
    arr.map((item, index) => {
    	if (res.indexof(item) === -1){
    		res.push(item)
    	}
    })
    

    附:array.from()的用法:

    array.from(arr, mapfn,thisarg):用于将两类可以把对象转换为真正的数组。

    类似数组的对象(必须有length属性) 可遍历的对象(部署了iterator接口的,string,es6新增的map和set)。

    参数:第一个是数组,必传;第二个是一个函数(类似map函数),对数组元素进行操作后再返回数组,可选;第三个是对于this关键字的指向,可选。

    var obj1 = {
    	0: 'a',
    	1: 'b',
    	2: 'c'
    }
    var arr1 = array.from(obj1)
    console.log(arr1) // []
    
    /* 1. 类数组对象,具有length属性,而普通对象是没有length属性的。*/
    /* 2. 类数组对象的属性名必须为非负整数,对象中的属性名会被当做字符串处理。*/
    
    var obj2 = { 
    	0: 'a',
    	1: 'b',
    	2: 'c',
    	length: 2
    }
    var arr2 = array.from(obj2)
    console.log(arr2) // ["a", "b"]
    
    var obj3 = {
    	0: 'a',
    	1: 'b',
    	2: 'c',
    	length: 4
    }
    var arr3 = array.from(obj3)
    console.log(arr3) // ["a", "b", "c", undefined]
    
    var obj4 = {
    	0: 'a',
    	1: 'b',
    	2: 'c',
    	length: 3
    }
    var arr4 = array.from(obj4, item => item + 1)
    console.log(arr4) // ["a1", "b1", "c1"]
    
    var obj5 = {
    	"1": "a",
    	"0": "b",
    	length: 2
    }
    var arr5 = array.from(obj5)
    console.log(arr5) // ["b", "a"]
    

    3.将伪数组对象转化为数组

    var obj = {
    	0: 'a',
    	1: 'b',
    	length: 2
    }
    //方法一:
    array.from(obj)
    
    //方法二:
    array.prototype.slice.call(obj) 
    
    //方法三:
    array.prototype.concat.apply([], obj)
    
    //方法四:
    array.prototype.splice.call(obj, 0) // 返回被删除的元素,原对象obj会被破坏掉
    console.log(obj) // obj: {length: 0}
    
    // 上述的array.prototype 均可用[]代替
    

    4.数组或对象的深拷贝

    //方法一:
    json.parse(json.stringify(obj))
    
    //方法二:递归遍历
    function clone (obj) {
      var res = obj.constructor === array  [] : {}
      for (var i in obj) {
        res[i] = typeof obj[i] === 'object'  clone(obj[i]) : obj[i] // 即obj[i]为数组或对象,继续拷贝
      }
      return res
    }
    
    //附:数组浅拷贝
    var arr = ['a', ['b', ['c']]]
    
    //1.使用slice()
    var res = arr.slice(0)
    console.log(res) // ['a', ['b', ['c']]]
    res[1][1] = 'b'
    console.log(res) // ['a', ['b', ['b']]]
    console.log(arr) // ['a', ['b', ['b']]]
    
    //2.使用concat()
    var arr = ['a', ['b', ['c']]]
    
    var res = [].concat(arr)
    res[1][1] = 'b'
    console.log(res) // ['a', ['b', ['b']]]
    console.log(arr) // ['a', ['b', ['b']]]
    
    //object.assign()也只能实现对象的浅拷贝,它只是一级属性复制,比浅拷贝多深拷贝了一层
    var obj = {a: "a", b: {c: "d"}}
    var res = object.assign({}, obj)
    res.b.c= "e"
    console.log(res) // {a: "a", b: {c: "e"}}
    console.log(obj) // {a: "a", b: {c: "e"}}
    

    5.没有块级作用域导致内层变量覆盖外层变量。

    var date = new date().getdate();
    function f(){
    	console.log(date);
    	if(false){
    	    var date = 0;//变量提升
       }
    }
    f();//undefined
    

    6.es6中标签模板的用法:

    let a = 1;
    let b = 2;
    function tag(arr, value1, value2){
        console.log(arr); //["hello ", " world ", ""]
        console.log(value1); //3
        console.log(value2); //2
    }
    tag`hello ${a + b} world ${a * b}`;
    /**
    如果函数名后的模板字符串中没有变量,则直接将其作为函数参数调用。
    如果存在变量则先将模板字符串处理成多个参数,再调用函数。
    
    处理规则:
    1.默认该函数第一个参数为数组,该数组的成员是模板字符串中那些没有变量替换的部分。
    2.变量替换只发生在数组的第一个成员与第二个成员之间、第二个成员与第三个成员之间。
    以此类推,故arr中第三个成员为"",原因是${a * b}的变量替换发生在第二个成员与第三个成员之间,
    所以必须存在第三个成员。
    3.函数的其他参数,都是模板字符串各个变量被替换后的值。
    
    函数形如:
    function tag(stringarr, ...value){}
    */