Javascript 为什么要将相同的对象推入阵列?
我正试图根据Yelp的反应建立一系列的位置。但是,在将我的数组推送到要返回的回调中并传递给回调后,我得到了相同的4个位置,而不是4个唯一的位置Javascript 为什么要将相同的对象推入阵列?,javascript,arrays,node.js,Javascript,Arrays,Node.js,我正试图根据Yelp的反应建立一系列的位置。但是,在将我的数组推送到要返回的回调中并传递给回调后,我得到了相同的4个位置,而不是4个唯一的位置 let rawResult = arrayBusinesses.jsonBody.businesses; let arrVenues = new Array(); // console.log(rawResult); let venue = { type: 'venue', id: '',
let rawResult = arrayBusinesses.jsonBody.businesses;
let arrVenues = new Array();
// console.log(rawResult);
let venue = {
type: 'venue',
id: '',
latitude: null,
longitude: null,
title: '',
address: ''
// thumb_url: ''
};
for (let i = 0; i < 5; i++) {
console.log('i', i);
(function(j){
console.log('j' + j);
let bus = rawResult[j];
venue.type = 'venue';
venue.id = j+'a';
venue.latitude = bus.coordinates.latitude;
venue.longitude = bus.coordinates.longitude;
venue.title = bus.name;
venue.address = bus.location.address1;
arrVenues.push(venue);
})(i);
}
让rawResult=arrayBusinesses.jsonBody.businesss;
设arrvices=newarray();
//console.log(rawResult);
让地点={
类型:'地点',
id:“”,
纬度:空,
经度:空,
标题:“”,
地址:''
//thumb\u url:'
};
for(设i=0;i<5;i++){
console.log('i',i);
(职能(j){
控制台日志('j'+j);
let bus=原始结果[j];
VICENUE.type='VICENUE';
地点id=j+'a';
地点.纬度=公共汽车.坐标.纬度;
地点.经度=公共汽车.坐标.经度;
地点.title=bus.name;
地点.address=bus.location.address 1;
到达场馆。推送(场馆);
})(i) );
}
您的代码很难阅读
const arrVenues = rawData.slice(0, 5)
.map((place, index) => (
{
type: 'venue',
id: `${index}a`,
latitude: place.coordinates.latitude,
longitude: place.coordinates.longitude,
title: place.name',
address: place.location.address,
}
));
如何回答你的问题问题问题是你每次都在推同一个物体。当您执行
arrvices时,push(场馆)
始终是同一个对象,实际上是同一个内存位置。由于您从不花时间复制对象,只需修改is属性,因此最终会得到相同对象的数组。Hmm,谢谢您的点睛之笔,我感谢您清理代码。我仍然感到困惑,因为某些原因,我不明白你所说的“制作副本”是什么意思。当你把对象推入数组时,你所做的只是把指针推到那个内存位置,所以之后所做的任何更改都会影响数组中的元素。为了防止出现这种情况,您需要使用解构push({…场地})
或push(object.assign({},场地)
或任何其他复制方法(取决于您的工具带)复制对象。哦,我现在明白了为什么我在数组中获得了最后一个对象的5个副本。谢谢!