1.map(): 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值
A)必须使用返回的新数组, B) 回调函数中有返回值。
2.filter() :方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素
[1,2,5,7,4,88,66,55].map((e)=>{
return e>6
})
(8) [false, false, false, true, false, true, true, true]
[1,2,5,7,4,88,66,55].filter((e)=>{
return e>6
})
(4) [7, 88, 66, 55]
结论:map只是当前参数调用函数的结果,而filter是对调用结果的返回
const m = [1,2,5,7,4,88,66,55].map((e)=>{
return e>6
});
console.log(m);
VM2760:4 (8) [false, false, false, true, false, true, true, true]
undefined
const n = [1,2,5,7,4,88,66,55].filter((e)=>{
return e>6
});
console.log(n);
VM2803:4 (4) [7, 88, 66, 55]
分割线-----------------------
不会还有人觉得,map不会改变原数组吧!!
const arr = [
{ name: 'Tom', age: 16 },
{ name: 'Aaron', age: 18 },
{ name: 'Denny', age: 20 }
]
const result = arr.map(item => {
item.age = item.age + 2; // 将他们的年龄都加2
return item
});
console.log('arr', arr);
console.log('result', result);
VM236:10 arr
(3) [{…}, {…}, {…}]
0: {name: "Tom", age: 18}
1: {name: "Aaron", age: 20}
2: {name: "Denny", age: 22}
length: 3
[[Prototype]]: Array(0)
VM236:11 result
(3) [{…}, {…}, {…}]
0: {name: "Tom", age: 18}
1: {name: "Aaron", age: 20}
2: {name: "Denny", age: 22}
length: 3
用事实说话!!!
正解是:“ 当数组中元素是值类型,map不会改变原数组;当是引用类型,则可以改变原数组”
const arr = [
{ name: 'Tom', age: 16 },
{ name: 'Aaron', age: 18 },
{ name: 'Denny', age: 20 }
]
const result = arr.map(item => ({
...item,
age: item.age + 2
}));
console.log('arr', arr);
console.log('result', result);
VM1065:11 arr (3) [{…}, {…}, {…}]0: {name: "Tom", age: 16}1: {name: "Aaron", age: 18}2: {name: "Denny", age: 20}length: 3[[Prototype]]: Array(0)
VM1065:12 result (3) [{…}, {…}, {…}]0: {name: "Tom", age: 18}1: {name: "Aaron", age: 20}2: {name: "Denny", age: 22}length: 3[[Prototype]]: Array(0)
最后 附一个还不错的文章-https://juejin.cn/post/6844903814030426125