js笔记map和forEach的异同

195 阅读1分钟
  1. 相同点

       1.都是遍历数组的。
       2.对空数组不会调用回调函数。
       3.不会改变原数组(某些情况下可改变)
    
  2. map

    map有返回值
//不改变原数组情况
const arr = ['1', '2', '3'];
const fun = (item, index, arr) => { 
    console.log(`${index}: ${Number(item)} / ${arr}`); 
};
arr.map(fun);
 0: 1 / 1,2,3
 1: 2 / 1,2,3
 2: 3 / 1,2,3
[undefined, undefined, undefined]
var arr1 = arr.map((item)=>{
  return  item=item*2  //需要创建返回值接收值
})
console.log(arr) // [1,2,3]
console.log(arr1) // [1,4,6]

//改变原数组情况
<---第一种--->
let arr = [1,2,3]
let arr1 = arr.map((item,index,arr)=>{
    return arr[index] = 4
})
console.log(arr) // [4,4,4]
console.log(arr1) // [4,4,4]

<---第二种--->
let list = [{name:"tom",age:"24"},{name:"lisa",age:"28"}]
let list1 = list.map( item =>{ 
    return item.name = 'jok'
})
console.log(list)//[{name:"jok",age:"24"},{name:"jok",age:"28"}]
console.log(list1)//['jok','jok']
  1. forEach

    forEach没有返回值
//不改变原数组情况
var a=[1,2,3,4,5]
var b=a.forEach((item)=>{
  item=item*2
})
console.log(b)//undefined
a.forEach(item=>{
  item = item*2
})
console.log(a)//[1,2,3,4,5]
//改变原数组情况
<---第一种--->
let arr = [1,2,3]
 arr.forEach((item,index,arr)=>{
    return arr[index] = 4
})
console.log(arr) // [4,4,4]

<---第二种--->
let list = [{name:"tom",age:"24"},{name:"lisa",age:"28"}]
 list.forEach( item =>{ 
    return item.name = 'jok'
})
console.log(list)//[{name:"jok",age:"24"},{name:"jok",age:"28"}]
  1. 总结

      这里就要引入栈(stack)内存和堆(heap)内存的概念了,如
      String,Number,Boolean,Undefined,Null是存在于栈内存中的,
      在栈内存中储存变量名及相应的值。Object,Array,Function存在于堆内存中,
      在堆内存中储存变量名及引用位置。
    

参考地址https://www.cnblogs.com/maibao666/p/13802716.html