删除数组最后一个元素、第一个元素、某个指定下标的元素、某个指定元素的方法、 获取两个数组之前的交集和并集

150 篇文章 2 订阅
36 篇文章 0 订阅

1、删除数组最后一个元素的方法有哪些?

① pop:默认删除数组最后一个元素【会改变原数组,返回被删除的元素

function deleteLastItem(arr) {
    arr.pop() // pop删除
    return arr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteLastItem(arr)) // [1, {name:'arr'}]

② slice:从原有数组中提取要保留的元素【不会改变原数组,返回新数组,是浅拷贝

function deleteLastItem(arr) {
    newArr = arr.slice(0, arr.length - 1) // 方法一
    // newArr = arr.slice(0, -1) // 方法二
    return newArr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteLastItem(arr)) // [1, {name:'arr'}]

注意:slice 不会修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组。

function deleteLastItem(arr) {
    newArr = arr.slice(0, -1)
    arr.push('原数组arr新加的值')
    arr[1].name = '原数组改的'
    console.log('打印原数组', arr) // [1, {name:'原数组改的'}, 3, '原数组arr新加的值']
    console.log('打印新数组', newArr) // [1, {name:'原数组改的'}]

    newArr.push('新数组newArr新加的值')
    newArr[1].name = '新数组改的'
    console.log('打印原数组', arr) // [1, {name:'新数组改的'}, 3, '原数组arr新加的值']
    console.log('打印新数组', newArr) // [1, {name:'新数组改的'}, '新数组newArr新加的值']

    return newArr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteLastItem(arr))

③ splice:添加或删除数组元素【会改变原数组,返回被删除的元素

function deleteLastItem(arr) {
    arr.splice(arr.length - 1, 1)
    return arr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteLastItem(arr)) // [1, {name:'arr'}]

④ for 循环遍历:遍历获取符合条件的元素,返回新数组

function deleteLastItem(arr) {
    let newArr = []
    for(let i = 0, len = arr.length; i < len; i++) {
        if (i < len-1) {
            newArr.push(arr[i])
        }
    }
    arr[1].name = '张三'

    return newArr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteLastItem(arr)) // [1, {name:'张三'}]

⑤ length 删除

function deleteLastItem(arr) {
    arr.length = arr.length - 1
    return arr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteLastItem(arr)) // [1, {name:'arr'}]

2、删除数组第一个元素的方法有哪些?

① shift:默认删除数组第一个元素【会改变原数组,返回被删除的元素

function deleteFirstItem(arr) {
    arr.shift()
    return arr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteFirstItem(arr)) // [{name:'arr'}, 3]

② slice:提取除第一个元素之外的其他元素

function deleteFirstItem(arr) {
    let newArr = arr.slice(1)
    // let newArr = arr.slice(1, arr.length)
    return newArr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteFirstItem(arr)) // [{name:'arr'}, 3]

③ splice:删除第一个元素

function deleteFirstItem(arr) {
    arr.splice(0, 1)
    return arr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteFirstItem(arr)) // [{name:'arr'}, 3]

 

3、删除数组某个指定下标的元素的方法有哪些?

splice

function deleteItem(arr, index) {
    arr.splice(index, 1)
    return arr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteItem(arr, 1)) // [1, 3]

② for

function deleteItem(arr, deleteIndex) {
    let newArr = []
    for(let i = 0, len = arr.length; i < len; i++) {
        if (i !== deleteIndex) {
            newArr.push(arr[i])
        }
    }
    return newArr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteItem(arr, 1)) // [1, 3]

注意:for 循环这里不可以使用 forEach 方法比对数组下标值,因为 forEach 在循环的时候是无序的

③ 注意不可以使用 delete

delete 操作会造成稀疏数组,被删除的元素的位置依然存在为 empty,且数组的长度不变

function deleteItem(arr, deleteIndex) {
    delete arr[deleteIndex]
    return arr
}
let arr = [1, {name:'arr'}, 3]
console.log(deleteItem(arr, 1)) // [1, empty, 3]

4、删除数组某个指定元素的方法有哪些?  

① filter

function deleteItem(arr, deleteValue) {
    let newArr = arr.filter(item => item !== deleteValue)
    return newArr
}
console.log(deleteItem([1, 2, 3], 2)) // [1, 3]

② forEach、map、for

function deleteItem1(arr, deleteValue) {
    arr.forEach((item, index) => {
        if (item === deleteValue) {
            arr.splice(index, 1)
        }
    })
    return arr
}
console.log(deleteItem1([1, 2, 3], 2)) // [1, 3]

// 或者
function deleteItem2(arr, deleteValue) {
    let newArr = []
    arr.forEach(item => {
        if (item !== deleteValue) {
            newArr.push(item)
        }
    })
    return newArr
}
console.log(deleteItem2([1, 2, 3], 2)) // [1, 3]

③ splice

function deleteItem(arr, deleteValue) {
    arr.splice(arr.indexOf(deleteValue), 1)
    return arr
}
console.log(deleteItem([1, 2, 3], 2)) // [1, 3]

④ new Set() 转换为集合对象

function deleteItem(arr, deleteValue) {
    let newSet = new Set(arr) // 传入一个数组,并且会自动去除重复的项
    // console.log(newSet) // Set(3) {1, 2, 3}

    // newSet.add(4) // 新增元素
    // console.log(newSet) // Set(4) {1, 2, 3, 4}

    // let result = newSet.has(1) // 检测是否存在元素
    // console.log(result) // true

    // newSet.clear() // 清空元素
    // console.log(newSet) // Set(0) {size:0}

    newSet.delete(deleteValue)
    console.log(newSet) // Set(3) {1, 3}

    let newArr = [...newSet]
    return newArr
}
console.log(deleteItem([1, 2, 3, 3], 2)) // [1, 3]

 

5、获取两个数组之前的交集和并集

let arr = [1, 666, 3, 4, 666]
let arr2 = [5, 6, 7, 7, 5, 666, 6, 1]

// 交集
let arrSet = new Set(arr)
let arrCross = [...new Set([...arr2])].filter(item => arrSet.has(item))
console.log('交集', arrCross) // [666, 1]

// 并集
let arrAll = [...new Set([...arr, ...arr2])]
console.log('并集', arrAll) //  [1, 666, 3, 4, 5, 6, 7]

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值