数组可以通过filter()和map()来对数组进行一系列操作;
我们先看一个简单的例子,他到底对数组做了什么:
let arr = ['afs','asd','s','f'];
arr.filter(function(item,index){
console.log(item,index)
})
//afs 0
//asd 1
//s 2
//f 3
这里map是一样的输出,可以看出啦,这两个方法类似于把我们的数组遍历了
那这两种方法到底在哪方面不同呢,我们看一个例子:
let arr = ['afs','asd','s','f'];
let arr1 = arr.forEach((item,index) =>{
return item.toUpperCase();
});
let arr2 = arr.filter((item,index)=>{
return item.toUpperCase();
})
let arr3 = arr.map((item,index)=>{
return item.toUpperCase();
})
console.log(arr1); //undefined
console.log(arr2); // ["afs", "asd", "s", "f"]
console.log(arr3); // ["AFS", "ASD", "S", "F"]
嘿嘿,返回值不同,没错,主要就是在这的返回值上;
他们分别是做一次过滤(filter)和一次统一映射(map)。说的更通俗一点,就是map函数之后,数组元素个数不变,但是按照一定的条件转换,数组元素发生了变化。filter函数之后,数组元素个数可能发生了改变,但是数组元素不会发生改变。
我们再看一个可以改变元素个数的例子
let arr = ['afs','asd','s','f'];
let arr1 = arr.forEach((item,index) =>{
return item.startsWith("a");
});
let arr2 = arr.filter((item,index)=>{
return item.startsWith("a");
})
let arr3 = arr.map((item,index)=>{
return item.startsWith("a");
})
console.log(arr1); //undefined
console.log(arr2); //["afs", "asd"]
console.log(arr3); //[true, true, false, false]
另外,jQuery也提供了map,filter方法,用法和原生的map,filter类似,只不过index,item参数位置和原生正好相反