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

时间:2017-06-17 22:34:21

标签: javascript arrays node.js

我正在尝试根据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);
    }

1 个答案:

答案 0 :(得分:0)

你的代码很难读懂像

这样的东西
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,
 }
));

如何回答你的问题,问题是你每次都持续推送同一个对象。当你arrVenues.push(venue)始终是同一个对象时,字面上是相同的内存位置。因为你永远不会花时间制作一个对象的副本而只是修改属性,你最终会得到一个同一个对象的数组。