![](/img/trans.png)
[英]Javascript: How can I swap elements of an array of objects (by reference, not index)?
[英]How can I add elements to an Array of objects in Javascript?
我正在编写一个程序来获取城市列表及其 GPS 坐标并将其存储在名为“城市”的数组中,以便以后使用。 这是代码片段:
var city = {name:String,lat:Number,lon:Number};
var cities = Array.of(city);
city.name="London";
city.lat=51.50;
city.lon=-0,11;
cities.push(city);
city.name="Barcelona";
city.lat=41.38;
city.lon=2,15;
cities.push(city);
console.log("Number of cities "+cities.length);
console.log(cities);
执行此代码时的结果如下:
Number of cities 3
[
{ name: 'Barcelona', lat: 41.38, lon: 2 },
{ name: 'Barcelona', lat: 41.38, lon: 2 },
{ name: 'Barcelona', lat: 41.38, lon: 2 }
]
也就是说,“push”方法似乎覆盖了所有数组记录,并且还添加了一条额外的记录。 我还声明了数组城市,如下所示: var city = [city]; // class "city" 的元素数组 var cities = []; 两种声明的结果是相同的。
这很奇怪,看起来很明显,但我不知道发生了什么..
¿ 我在上面显示的代码中做错了什么?
提前致谢
您观察到的行为与push()
function 或数组无关。 相反,它是 JavaScript 处理所有对象的方式:通过引用。
要克隆 object,换句话说,打破引用,您可以使用如下调用
city = {...city}; // spread
city = Object.assign({}, city);
city = jQuery.extend({}, city);
您遇到的问题是,在更改 object city
内的属性时,您同时修改了数组中已有的引用。
那是因为你所在的city
object 是通过引用传递的。 数组中的 object 将指向同一个实例,因此修改它将修改数组中该 object 的所有实例:无论插入多少次。
您可以做的是创建一个 function,它返回一个新的 object:
function getCity(name, lat, long) { return { name, lat, long }; } const cities = []; cities.push(getCity('London', 51.50, 0.11)); cities.push(getCity('Barcelona', 41.38, 2.15)); console.log("Number of cities " + cities.length); console.log(cities);
或者,只需在适当位置创建对象:
function getCity(name, lat, long) { return { name, lat, long }; } const cities = []; cities.push({ name: 'London', lat: 51.50, long: -0.11 }); cities.push({ name: 'Barbelona', lat: 41.38, long: 2.15 }); console.log("Number of cities " + cities.length); console.log(cities);
非常感谢!! 这是初学者的错误.... javascript 管理对象的方式,与 push() 方法无关。
我使用了一个 class 和一个构造函数,并像这样实例化一个新的“新鲜” object 并且它可以工作.:. 这是代码:
class City {
constructor(name, lat,lon) {
this.name = name;
this.lat = lat;
this.lon = lon;
}
};
var cities = [];
var newcity = new City("London",51.50,-0.11);
cities.push(newcity);
var newcity = new City("Barcelona",41.38,2.15);
cities.push(newcity);
var newcity = new City("Rome",41.90,12.49);
cities.push(newcity);
console.log("Number of cities "+cities.length);
console.log(cities);
结果正确:
Number of cities 3
[
City { name: 'London', lat: 51.5, lon: -0.11 },
City { name: 'Barcelona', lat: 41.38, lon: 2.15 },
City { name: 'Rome', lat: 41.9, lon: 12.49 }
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.