js笔记(一)-《javascript高级程序设计》- 数组小知识

学习js有一段时间,但是没有完完整整的看完一本原生js的书,或许有,但也是匆匆扫过,近期将重新阅读js经典书《javascript高级程序设计》,希望从中能够获得新的知识。

所以强烈要求自己写下笔记,笔记内容虽然很简单,但是却也是学习过程中必不可少的一部分,会不定时更新,如果有什么欠缺的地方欢迎提出,同时也希望可以和众大神、萌新们一起学习!

这一篇笔记主要涉及数组的一些小知识。

1.全局对象在函数重置对象不受影响

全局对象作为参数传入函数,在函数内部重置参数对象,最后全局对象不受影响。
函数内部修改的对象即为局部对象,在函数执行完成之后,改局部对象变会立刻被撤销。
如下所示:

function setName(obj){
    obj.name = "Nicholas";
    obj = new Object();
    obj.name = "Greg";
    console.log("obj name:",obj.name);//Greg
}
var person = new Object();
setName(person);
console.log(person.name);//Nicholas

注:上述person全局对象并未受到函数内部重置对象影响

2. 数组小知识

  • pop()
例子:
    var aar = ['a','b'];
    aar.pop();//移除最后一项,返回移除项
  • push()
例子:
    var aar = ['a','b'];
    aar.push('d','c');  //添加到数组末尾,返回修改后数组长度
  • shift()
例子:
    var aar = ['a','b'];
    aar.shift();//移除第一项,返回移除项
  • unshift()
例子:
    var aar = ['a','b'];
    aar.unshift('c','s');//添加到数组前面,返回修改后数组长度
  • conact()
例子:
    var aar = ['a','b'];
    aar.conact('c');//连接数组  生成新的数组
    aar.conact(['d','e']);
    console.log(aar);//打印结果:['a','b','c','d','e']
  • slice()
例子:
    var aar = ['a','b','c','d','e'];
    aar.slice(1);  // 生成新数组 ['b','c','d','e']
    aar.slice(14);  // 生成新数组 ['b','c','d']
    //可以接收一或两个参数
  • splice()
    • 删除
    • 插入
    • 替换
例子:
    var aar =  ['a','b','c','d','e'];
    aar.splice(1,2);//1:起始位置 2:删除项数  从位置1删除两项
    aar.splice(1,0,'f');//1:起始位置 2:删除项数  在位置1处插入f
    aar.splice(1,1,'f');//1:起始位置 2:删除项数  在位置1处插入f 删除一项
  • indexOf()/lastIndexOf()
例子:
    var aar =  ['a','b','c','d','e'];
    arr.indexOf(b);//从第一项开始找到b的位置 1
    arr.lastIndexOf(b) //从末尾开始找到b的位置 3
    //找不到则返回-1
  • 迭代方法

    • every()
    • filter()
    • forEach()
    • map()
    • some()
    1)其中,every()和some()两个方法及其相似,都用于查询数组中的项是否满足某个条件,但是不一样的地方是,every()类似于逻辑运算中的&&,数组中的每一项都要满足条件,才能返回true值,且当前面有一个不满足时便直接返回false;some()则类似于逻辑运算中的||,数组中只要有一项满足条件便返回true,且当第一项满足返回true是便直接返回true。
    例子:
       function numberChecker(element,index,item){
            return (element >=10 );
        }
    
       console.log("every:",[10,80,5,10,50].every(numberChecker));//false
       console.log("some:",[1,8,5,10,5].some(numberChecker));//true
    
      //numberChecker()这个方法用于判断数字是否满足条件,满足则返回true
    
    2)filter()和它的名字一样,就是过滤,从数组中过滤出自己想要的子数组。
    例子:
       function numberChecker(element,index,item){
            return (element >=10 );
        }
    
       console.log([10,80,5,10,50].filter(numberChecker));//[10,80,10,50]
    
      //numberChecker()这个方法用于判断数字是否满足条件,满足则返回true
    
    3)map()和它的名字一样,就是映射,将原数组映射成新的数组。
    例子:
       function numberChecker(element,index,item){
            return (element * 2);
        }
    
       console.log([10,80,5,10,50].filter(numberChecker));//[20,160,10,20,100]
    
      //numberChecker()这个方法用于设定条件方法
    
    4)forEach()类似于数组遍历。
    例子:
      var  arr= [10,80,5,10,5];
       var evenArr = [];  
       function numberChecker(element,index,item){
            if (element%2 == 0) {
                evenArr.push(element);
                return;
            }
       }
       arr.forEach(numberChecker2)
       console.log(evenArr);//[10,80,10]
    
      //numberChecker()这个方法用于设定条件方法,选出偶数
    
  • 数组排列

 function descending(v1,v2){//降序
    if( v1 < v2 ){
        return 1;
    }else if( v1 > v2 ){
        return -1;
    }else{
        return 0;
    }

}
function ascending(v1,v2){//升序
    if( v1 > v2 ){
        return 1;
    }else if( v1 < v2 ){
        return -1;
    }else{
        return 0;
    }

}

var values = [0,5,4,6,8,10];
console.log(values.sort(descending));//[10,8,6,5,4,0]
console.log(values.sort(ascending));//[0,4,5,6,8,10]
  • 归并方法

    • reduce()
    • reduceRight()
    两个方法都是遍历数组,构建最终返回的值,但是遍历的方法不同,并且都接收四个相同的参数(前一个值,当前值,项的索引,数组对象)。
    例子:

       function numberChecker(precurrent,index,item){
           return current
       }

       console.log("reduce:",[1,2,3,4,5].reduce(numberChecker));//5
        console.log("reduceRight:",[1,2,3,4,5].reduceRight(numberChecker));//1

      //可以从上面两个打印出来的结果得出reduce从左边开始遍历,而reduceRight从右边开始遍历

以上为数组的基础方法,个人觉得js 数组这一块还是比较有用的,
前不久用过Underscore工具类,里面有很多数组的方法,感觉挺实用的,上手也挺快,有兴趣的萌新们可以去看看。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值