如何替换数组元素而不修改原始数组并创建副本

How do I replace an array element without modifying the original array and creating copy?

本文关键字:原始 修改 数组 副本 创建 何替换 替换 数组元素      更新时间:2023-09-26

我试图创建一个接收数组作为参数的纯函数,现在我想在给定索引处替换元素,而不修改提供的数组参数。

基本上我在找这样的东西:

export const muFunc = (arr) => {
    return arr.replaceElementAt(1, 'myNewValue'); // This doesnt modify arr at all
}

我该怎么做呢?

直接复制数组。一个简单的方法是slice:

export const muFunc = (arr) => {
    var newArray = arr.slice();
    newArray[1] = 'myNewValue';
    return newArray;
};

摘自对这个问题的评论:

正如主题所说-我试图找出是否有可能不创建数组的副本

不,这是不可能的 —嗯,不合理。你要么修改原文,要么复制一份。

可以创建只为"1"属性返回不同值的代理对象,但这似乎没有必要复杂。

您可以利用Object.assign并执行以下操作:

const arr = [1, 2, 3, 4, 5];
const updatedArr = Object.assign([], arr, {1: 'myNewValue'});
console.log(arr); // [1, 2, 3, 4, 5]
console.log(updatedArr); // [1, "myNewValue", 3, 4, 5]

可以使用map函数来实现

var arr = [1,2,3,4,5,6,7,89];
arr.map(function (rm) {
    if (rm == 2) {
        return 3
    } else {
        return rm
    }
})

试试这个:

function replace(l) {
    return l.splice("new value",1);
};
var x = replace(arr);