假设我有多个阵列。
var array1= [];
var array2= [];
var array3= [];
我有另一个对象数组,每个对象都有一个健康参数。 假设我将此数组中的第一个对象推送到array1,array2和array3。
现在,如果我编辑array1对象的health参数:
array1[0].health -= 50
它会更改每个数组对象的运行状况。我怎么能这样做它只为数组im调用?
答案 0 :(得分:2)
如果您想要每个数组中的对象副本,并且您不希望修改一个对象影响其他数组,那么您将需要克隆该对象。这篇文章的答案将帮助你解决这个问题:
What is the most efficient way to deep clone an object in JavaScript?
答案 1 :(得分:1)
javascript中的对象是通过引用分配的,因此如果将同一个对象放入两个单独的数组中,则每个数组元素都指向完全相同的对象。
如果你想在每个数组中使用单独的对象,那么你必须为第二个数组显式创建一个新对象(如果那是你想要的话,从第一个对象复制属性)。
在jQuery中,您可以使用$.extend()
制作对象的副本。有关两种不同的使用方法,请参阅this answer。
或者,在简单的Javascript中,这里是一个生成普通JS对象的浅层副本的函数。
function copyObj(src) {
var copy = {};
for (var prop in src) {
if (src.hasOwnProperty(prop)) {
copy[prop] = src[prop];
}
}
return copy;
}
答案 2 :(得分:0)
var array1 = []
var array2 = []
array1.health = 50
array2.health = 10
的console.log(array1.health)
50
它仍然是50.另一方面,如果你的问题涉及改变数组元素
var array1 = [0,1]
array1 [0] .health = 50
array1 [1] .health = 10
console.log(array [0] .health)将打印出10因为health是数组对象的属性而不是元素。