Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要将相同的对象推入阵列?_Javascript_Arrays_Node.js - Fatal编程技术网

Javascript 为什么要将相同的对象推入阵列?

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: '',

我正试图根据Yelp的反应建立一系列的位置。但是,在将我的数组推送到要返回的回调中并传递给回调后,我得到了相同的4个位置,而不是4个唯一的位置

    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个副本。谢谢!