【Javascript修炼篇】如何构造不可变的pop() shift() unshift()

我们对 JavaScript 中这些函数的工作原理已经相当熟悉了。所以,我打算根据自己的理解,为这些函数写出不可变(immutable)的实现版本。欢迎你在评论区留下你的建议、疑虑或是提问,我随时乐于更新这篇文章。

// 不可变版本的 pop 函数,移除数组最后一个元素
function pop(arr) {
    let newArr = [...arr]; // 深拷贝一份原数组
    newArr.length = arr.length - 1; // 将新数组长度减一
    return newArr; // 返回新数组
}

// 不可变版本的 push 函数,向数组末尾添加一个或多个元素
function push(arr, ...item) {
    const newArr = [...arr]; // 深拷贝一份原数组
    if (item.length >= 1) { // 如果有元素要添加
        for (let i = 0; i < item.length; i++) { // 遍历所有要添加的元素
            newArr[newArr.length] = item[i]; // 添加到新数组的末尾
        }
    }
    return newArr; // 返回新数组
}

// 不可变版本的 shift 函数,移除数组第一个元素
function shift(arr) {
    let [a, ...b] = arr; // 解构赋值,忽略第一个元素,其余放入新数组
    return b; // 返回新数组
}

// 不可变版本的 unshift 函数,向数组开头添加一个或多个元素
function unshift(arr, ...item) {
    const newArr = []; // 创建一个空数组
    if (item.length >= 1) { // 如果有元素要添加
        for (let i = 0; i < item.length; i++) { // 遍历所有要添加的元素
            newArr[i] = item[i]; // 添加到新数组的开头
        }
    }
    newArr.push(...arr); // 将原数组的所有元素添加到新数组的末尾
    return newArr; // 返回新数组
}

感谢阅读!希望这篇文章能让你有所收获!别忘了在评论区留下你的足迹哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值