JavaScript数组方法总结

改变原数组:

  • pop 尾删
  • push尾添
  • shift头删
  • unshift头添
  • splice替换或者删除 视参数而定
  • sort排序默认按字符集顺序排序
	//第二个参数为0表示不删除所以实现的是添加一个元素
    	var arr0=[7,4,6,51,1];
    	var arr1=[7,4,6,51,1];
    	var arr2=[7,4,6,51,1];
    	var arr3=[7,4,6,51,1];
    	var arr4=[7,4,6,51,1];
    	var arr5=[7,4,6,51,1];
    	arr0.splice(0,0,123);
    	console.log(arr0);
    	//此时实现的是替换功能,因为删除了第一个又添加了第一个
    	arr1.splice(0,1,12);
    	console.log(arr1);
    	//此时实现的是删除
    	arr2.splice(0,2);
    	console.log(arr2);
    	//删除第二位以后的所有包含第二位
    	arr3.splice(2);
    	console.log(arr3);
    	//删除第-5+5第0位后的所有
    	arr4.splice(-5);
    	console.log(arr4);
    	//删除第-3+5第2位包含第二位两个
    	arr5.splice(-3,2);
    	console.log(arr5);

运行结果如下:

不改变原数组,返回新数组:

  • slice(start,end(不包含))
  • concat连接多个数组

新方法:

some

every(和some区别?)

map(映射,有返回值)

filter(过滤,有返回值)

reduce(缩减数组,有返回值)

forEach(遍历,如何跳出循环?无返回值)

  var arr=[7,4,6,51,1];
    	//reduce接收一个函数作为累加器,数组中的每个值从左到右开始缩减,最终为一个值
    	//函数上一次的返回值,当前值,当前值索引,当前数组对象
    	//reduce求和
    	let res=arr.reduce((val,item,index)=>{
    		return val+item;
    	});
    	console.log(res);//69
    	//reduce求平均值
    	let res0=arr.reduce((val,item,index)=>{
    		let res1=0;
    		if (index<arr.length-1) {
    			return (val+item);
    		}else{
    			return (val+item)/(arr.length)
    		}
    	})
    	console.log(res0);

运行结果:

 

深入理解map 和reduce函数:
map函数:查看MDN解释:Array​.prototype​.map()

截图如下:

理解了map的用法,我们继续看一下reduce是怎么工作的:Array​.prototype​.reduce()

红框的两句话其实意思是一样的,这里可以这么理解:

  • 在用reduce累加的时候可以不提供最后一个参数(initial value)因为不提供的时候,acc就是第一个值,cur就是第二个值,累加就可以了。
  • 而其他情况:比如在类似于这种的一种函数式编程中:(就一定要写好初始值)

compose 可以把类似于 f(g(h(x))) 这种写法简化成 compose(f, g, h)(x)。请你完成 compose 函数的编写。

        const add1 = (x) => x + 1
        const mul3 = (x) => x * 3
        const div2 = (x) => x / 2
        const compose=(...args)=>{
            console.log(Array.isArray(args)) //true
            return (x)=>{
                return args.reduceRight((acc,item,index)=>{
                return item(acc)
            },x)
            }
        }
    console.log(compose(div2,add1,add1)(1)) //1.5

然后我们用一个reduce实现map的功能:

    	Array.prototype._map = function(fn, callbackThis) {
		    // 最终返回的新数组
		    let res = [];
		    // 定义回调函数的执行环境
		    // call第一个参数传入null,则 this指向全局对象,同 map的规则
		    let CBThis = callbackThis || null;
		    this.reduce((res0, item, index, self) => {
		        // 传入map回调函数拥有的参数
		        // 把每一项的执行结果push进res中
		        res.push(fn.call(CBThis, item, index, self));
		    }, 0);//或者传入null也是可以的,视情况而定
		    return res;
	};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值