【发布时间】:2021-03-13 11:52:16
【问题描述】:
例如我有listings 数组:
[ { name: 'bob', price: '10' }, { name: 'jack', price: '12' } ]
我正在尝试找到最低卖家并稍后使用它的数据。
我做var currentLowestSeller = listings[0];
现在currentLowestSeller 是:
{ name: 'bob', price: '10' }
稍后我会更改currentLowestSeller,但我不希望更改主listings 数组。
我做currentLowestSeller.price = currentLowestSeller.price * 0.5; 之后这个列表数组看起来像这样:
[ { name: 'bob', price: 5 }, { name: 'jack', price: '12' } ]
如何防止这种情况发生?
如果您想重新创建它,只需运行以下代码:
var listings = [];
var name1 = 'bob';
var name2 = 'jack';
var price1 = '10';
var price2 = '12';
listings.push({
name: name1,
price: price1
})
listings.push({
name: name2,
price: price2
})
var currentLowestSeller = listings[0];
currentLowestSeller.price = currentLowestSeller.price * 0.5;
console.log(listings);
我尝试过的:
我尝试在做任何事情之前创建listings 数组的副本。
var unchangedListings = listings;
var currentLowestSeller = listings[0];
currentLowestSeller.price = currentLowestSeller.price * 0.5;
console.log(unchangedListings);
但它没有用。
后来我决定const unchangedListings = listings; 会有所帮助。但由于某种原因,它也会更改定义为常量的值。
【问题讨论】:
-
“我讨厌 JavaScript。” Javascript 当然有它的问题,但很少有语言具有默认不可变的集合。 Python、Java、Ruby、C++ 等都对集合和对象使用引用类型,并且您将遇到相同的“问题”。这只是编程的一部分。
-
另外,根据您对使用 const 的编辑:const 仅防止重新绑定名称,const 引用仍然是可变的。
const foo = {}; foo.a = 1;
标签: javascript arrays variable-assignment