美文网首页
常用数组方法和算法总结

常用数组方法和算法总结

作者: Jason_Shu | 来源:发表于2018-07-30 22:34 被阅读0次

    近期在做任务的时候,发现自己对常用数组的方法理解不透彻,故写下此篇。

    1. map方法
      map方法返回一个新数组,但是不改变原数组。
      例如:
    let a = [1, 2, 3, 4];
    
    let b = a.map(v => v*2);
    
    console.log(a);  //  [1, 2, 3, 4]
    
    console.log(b);  //  [2, 4, 6, 8]
    
    
    1. forEach方法
      感觉forEach和map是一对,做任务的时候有时候傻傻分不清,感觉都是对数组中每一个元素进行一番操作。
      但是,与map方法不同的是,forEach方法没有返回值,仅仅是执行回调函数的行为。
      我们来看看两者的对比:
    let a = [1, 2, 3, 4];
    
    let b = a.forEach( v => {
        console.log(v); //some actions
    }) ;
    
    console.log(a); 
    
    console.log(b); 
    
    //  1
    //  2
    //  3
    //  4
    //  [1, 2, 3, 4]
    //  undefined
    

    map方法:

    let a = [1, 2, 3, 4];
    
    let b = a.map( v => {
        console.log(v); //some actions
    }) ;
    
    console.log(a); 
    
    console.log(b); 
    
    //  1
    //  2
    //  3
    //  4
    //  [1, 2, 3, 4]
    //  [undefined, undefined, undefined, undefined]
    

    这让我想到日常用TablePage组件中,对其中某一项在进行“包装”时,应该用forEach更合理些。
    如:

    item.Money = <span>¥{item.money}</span>
    
    1. filter方法
      filter方法顾名思义,就是筛选数组的意思。返回一个新数组,包含了符合条件的所有元素。如果没有符合条件的元素则返回空数组,不改变原数组。
      例如:
    let a = [1, 2, 3, 4];
    
    let b = a.filter( v => v > 2 );
    
    console.log(a); //  [1, 2, 3, 4]
    
    console.log(b); //  [3, 4]
    
    1. some方法
      我把filter方法和some方法放一起,因为我感觉他们都给我一种“筛选”的感觉,区别是filter方法会告诉你符合条件的是谁,有哪些;而some方法就只会告诉你这个数组中,是否还有符合条件的元素(至少一个),有就回答true,没有就是false.
      如:
    let a = [1, 2, 3, 4];
    
    let b = a.some( v => v > 2 );
    
    console.log(a); //  [1, 2, 3, 4]
    
    console.log(b); //  true
    

    (注意:some方法并不是遍历所有元素哟,遇到第一个符合条件的元素便会结束。)

    1. every方法
      给数组中每一项都运行给定的函数,每一项都返回true, 则返回true。不改变原数组。
    let a = [1,2,3,4,5,6];
    let b = a.every((value) => value < 10);  //true
    
    1. indexOf和lastIndexOf方法
      都可以接受两个参数:查找的值、查找的起始位置
      此方法就是为了某个元素是否存在于数组a中,存在即返回该元素在数组a中的位置下标,否则返回-1.
    let a = [1, 2, 3, 4];
    
    let b = a.indexOf(2);
    
    let c = a.lastIndexOf(4, 2);
    
    console.log(b);  //  1
    

    7.splice方法
    splice方法的第一个参数是确定你要删除的元素的下标,第二个参数是删除的个数。
    我们首先来看看下面的代码:

    let a = [1, 2, 3, 4];
    let b = [1, 2, 3, 4];
    
    a.splice(2, 1);
    console.log(a);  //  [1,  2,  4]
    
    b = b.splice(2, 1);
    console.log(b);  //  [3]
    

    为何会有上述结果的产生?原来是因为使用splice方法时,它虽然会对原数组进行处理,但是返回的被处理的数组。比如上述代码原意是为了删除数组 [1, 2, 3, 4]中的元素3,但是返回的恰恰是[3].

    1. slice方法
      返回一个新数组,第一个参数是起始位置x,第二参数是结束位置y,包含从起始位置x到y-1的元素(不包含结束位置的元素)。不改变原数组。
    let a = [1,2,3,4];
    let b = a.slice(0,2);
    
    console.log(a);  //  [1,2,3,4]
    console.log(b);  //  [1,2]
    
    1. join方法
      将数组中每一项放入一个字符串,可以在参数中制定分隔符,默认情况下是“,”。不改变原数组。
    let a = [1,2,3,4]
    let b = a.join();  // "1,2,3,4"
    let c = a.join("/")  //  "1/2/3/4"
    
    1. concat方法
      将两个数组合并成一个新数组返回,不改变原数组。
    let a = [1,2,3,4];
    let b =[5,6];
    let c = a.concat(b);
    
    console.log(a)  //  [1,2,3,4]
    console.log(b)  //  [5,6]
    console.log(c)  //  [1,2,3,4,5,6]
    
    1. pop方法
      用于删除并返回数组最后一个元素。返回最后一个元素,改变原数组。
    let a = [1, 2, 3];
    let b = a.pop();
    
    console.log(a);  //  [1,2]
    console.log(b);  //  3
    
    1. shift方法
      用于删除并返回数组第一个元素。返回第一个元素,改变原数组。
    let a = [1, 2, 3];
    let b = a.shift();
    
    console.log(a);  //  [2,3]
    console.log(b);  //  1
    
    1. push方法
      用于在数组最后一个元素后加入新元素,返回加入后新数组的『长度』,改变新数组,可以传多个新元素。
    let a = [1,2,3,4];
    let b = a.push(6,7); 
    
    console.log(a);  // [1,2,3,4,6,7]
    console.log(b);  //  6
    
    1. unshift方法
      用于在数组第一个元素前加入新元素,返回加入后新数组的『长度』,改变新数组,可以传多个新元素。
    let a = [1,2,3,4];
    let b = a.unshift(6,7); 
    
    console.log(a);  // [6,7,1,2,3,4]
    console.log(b);  //  6
    
    1. sort方法
      按照Unicode code位置排序,改变原数组。
    let a = [1,3,22,4];
    let b = a.sort();
    
    console.log(a);  //  [1,22,3,4]
    console.log(b);  // [1,22,3,4]
    
    1. reserve方法
      reverse() 方法用于颠倒数组中元素的顺序。返回的是颠倒后的数组,会改变原数组。
    let a = [1,3,22,4];
    let b = a.reserve();
    
    console.log(a);  //  [4,22,3,1]
    console.log(b);  // [4,22,3,1]
    

    然后今儿运用上述方法来讲一个我任务总是遇到的算法:

    1.数组求差集
    此例是为了在selectedList数组中删除disabledList里含有的元素。

    let selectedList = [ 2, 78, 0, 77, 5, 16 ];
    let disabledList = [5, 77];
    
    //  方法一
    disabledList.forEach(item => {
        let index = selectedList.indexOf(item);
        if(index > -1) {
            selectedList.splice(index, 1);
        }
    });
    
    //  方法二
    selectedList = selectedList.filter(v => !disabledList.includes(v));
    

    参考:
    1.公众号「Javascript」里的「JavaScript常用数组操作方法,包含ES6方法」一文。

    相关文章

      网友评论

          本文标题:常用数组方法和算法总结

          本文链接:https://www.haomeiwen.com/subject/mlvqvftx.html