如何替换数组元素而不修改原始数组并创建副本
How do I replace an array element without modifying the original array and creating copy?
我试图创建一个接收数组作为参数的纯函数,现在我想在给定索引处替换元素,而不修改提供的数组参数。
基本上我在找这样的东西:
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);
相关文章:
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 在编译阶段后创建新的DOM树,或者继续使用原始修改的DOM
- 修改后的原始数组值
- jquery下拉菜单修改所选文本,但在后续单击时显示先前所选文本的原始值
- 为什么数组上的 js 映射会修改原始数组
- 从作为参数传入的数组中删除对象不会修改原始数组 (Angular)
- 如何在传单中编辑多边形后获得修改和原始的geojson点
- 遍历 Javascript 正则表达式匹配以修改原始字符串
- 如何实现一个插件,它只在需要时修改原始模块
- 通过javascript获取原始/未修改的请求字符串
- 在 javascript 中的原始对象中修改
- 为什么在这种情况下排序会修改原始
- 无法获得修改后的fabic.js对象的旋转角度以报复原始角度
- 使用forEach、映射或筛选器克隆和操作嵌套对象,而不修改原始对象
- 修改函数内部的JavaScript对象,如果出现错误,则返回原始对象
- 原始字符串是否始终保持未修改
- 使用jQuery在原始值的基础上修改每个文本字段的值
- 对象/数组方法:修改原始的还是创建新的?指导方针
- 是否有可能在不修改原始代码的情况下向现有javascript函数添加一些代码?
- 访问继承的修改对象的原始属性