改变原数组:
- 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;
};