List中为啥修改一个值其他值也变
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了List中为啥修改一个值其他值也变相关的知识,希望对你有一定的参考价值。
比如有一个List<xxxxBean> lists , 里面有4条数据
然后 list.get(1).setName("啊啊啊"); 之后 其他三条数据里面的name成员变量的值也都变成了"啊啊啊" 什么原因会导致这样的问题
import copy
List2=copy.deepcopy(List1)
这样赋值,List2初始值和List1一样,因为是深度复制List1中的元素,所有深层元素都引用的是不同的对象,List1的任何改变不会影响List2 参考技术A Listlist=commonService.findByHql(hql);现在这个List里面放的是一个表(TGzmsExaminee),我要修改这个表下面的一个字段,请问这么实现?
即使未显式修改数组值也已修改[重复]
【中文标题】即使未显式修改数组值也已修改[重复]【英文标题】:Array value modified even though it was not modified explicitly [duplicate] 【发布时间】:2018-01-15 05:44:16 【问题描述】:我编写了下面的代码,试图将一个元素添加到新数组的开头并返回该新数组。它工作正常,但是当我返回 arr 而不是 newArr 时,arr 也发生了变化。
function addToFrontOfNew(arr, element)
newArr = arr;
newArr.unshift(element);
return newArr;
如果我要写:
function addToFrontOfNew(arr, element)
newArr = arr;
newArr.unshift(element);
return arr;
并使用 addToFrontOfNew([1,2], 3) 测试函数,该函数将返回 [3, 1, 2]。
如何重写函数,使原来的 arr 不会随着 newArr 一起被修改?
【问题讨论】:
return [element].concat(arr)
这是因为在您的代码中 newArr
和 arr
都引用同一个数组。您没有克隆阵列。检查***.com/questions/3978492/…
【参考方案1】:
您应该克隆原始数组而不是引用它。一种方法是:
function addToFrontOfNew(arr, element)
newArr = arr.slice();
newArr.unshift(element);
return newArr;
slice() 方法返回一个浅拷贝...这里是详细信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
【讨论】:
【参考方案2】:function addToFrontOfNew(arr,element,rv)
var len = arr.length;
for(i=0; i<len; i++)
if (i==0)
newArr = [element,arr[0]];
else
newArr.push(arr[i]);
switch(rv)
case 'arr':
return arr;
break;
case 'newArr':
return newArr;
break;
var fruit = ['cherries','apples','pears'];
var newElement = 'bananas';
console.log(addToFrontOfNew(fruit,newElement,'arr'));
console.log(addToFrontOfNew(fruit,newElement,'newArr'));
** 修复了处理评论的代码 **
添加了一个 switch 语句,以便最终用户可以返回原始数组或新数组。基本上它计算原始数组,如果增量 = 0,则创建新数组,添加第一个元素,然后循环遍历数组的其余部分,将剩余元素按顺序推送到数组中。 switch 语句允许您返回原始数组或新数组。在控制台日志中工作,如果您使用 jQuery 将其输出到标签,只需将 .toString() 附加到函数的末尾即可。
【讨论】:
此代码不起作用。尝试使用console.log
而不是alert
,你会发现结果是错误的。 [arr.toString()]
并没有像你想象的那样做任何事情。
制作数组(浅)副本的正确方法是array.slice()
乔丹跑步 - 立即尝试。以上是关于List中为啥修改一个值其他值也变的主要内容,如果未能解决你的问题,请参考以下文章