map 函数返回 undefined

756 阅读1分钟

image.png

image.png

 var userId = 1;
        var employeeId = 12;
        var  personnelLists = [12,45,1,4,8,9]
        let arr;
        arr = personnelLists.map(item => {
            if (item !== userId && item !== employeeId) {
                return item
            }
        })
        console.log(arr)

[undefined, 45, undefined, 4, 8, 9] 为什么会出现2个undefined呢?而不是我预期的 [45, 4, 8, 9]

是因为map()方法创建了一个新数组,但新数组并不是在遍历完arr后才被赋值的,而是每遍历一次就得到一个值

改为filter 实现:

  var userId = 1;
        var employeeId = 12;
        var personnelLists = [12, 45, 1, 4, 8, 9]
        let arr;
        arr = personnelLists.map((item, index) => {
            if (item !== userId && item !== employeeId) {
                return item
            }
            // delete personnelLists[index]; //delete方法删除掉数组中的元素后,会把该下标出的值置为undefined,数组的长度不会变
        })

        console.log(arr)

        let newArr = [undefined, 45, undefined, 4, 8, 9].filter(item => item !== undefined)
        console.log(newArr) // [45, 4, 8, 9]
        // console.log( personnelLists.splice(0,1))//[12] 
        // console.log( personnelLists)//[45, 1, 4, 8, 9]


        var a = [5, 12]
        var b = [5, 78, 985245, 124, 45, 12]
        // b中过滤掉a中的元素

        const c = b.filter((item) => {
            return a.indexOf(item) === -1
        })

        console.log('c', c) //[78, 985245, 124, 45]

map 应用于:


        var array1 = [1, 4, 9, 16];

        const map1 = array1.map(x => {
            if (x == 4) {
                return x * 2;
            }
            return x;
        });

        console.log(map1)//[1, 8, 9, 16]
      

总结: map 应用于改变值(不是删除值) 而filter 更适用于 删除值