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]