【问题标题】:Same JSON ojbects in array when receiving differnt array elements接收不同数组元素时数组中的相同 JSON 对象
【发布时间】:2016-03-26 23:59:44
【问题描述】:

在我的 NodeJS 应用程序中,我在 Jade 中获得了一个 JSON 对象(工作正常)。在这里,我尝试仅收集(srcTweets)相关数据并将其返回到新的 JSON 对象(stgTweets)中。我用于动态表使用。

在这里我使用以下脚本:

    var srcTweets = [];
    var srcTweets = !{JSON.stringify(tweets)};
    var aantalSrcTweets = srcTweets.length;

    //Loop throug all tweets and collect all relevant elementen from srcTweet:
    var stgTweet = {}
    var stgTweets = [];
    console.info('----------START LOOP--------------------');
    for(var i = 0; i < aantalSrcTweets; i++){
        console.info(i);

        stgTweet.Id = srcTweets[i]._id;
        stgTweet.userId = srcTweets[i].user.id;
        stgTweet.userFollowerCount = srcTweets[i].user.followers_count;
        stgTweet.userFriendCount = srcTweets[i].user.friends_count;
        stgTweet.userFavouritesCount = srcTweets[i].user.favourites_count;
        stgTweet.text = srcTweets[i].text;
        stgTweet.coordinates = srcTweets[i].coordinates;
        stgTweet.userLocation = srcTweets[i].user.location;

        stgTweets[i] = stgTweet;

        console.info(stgTweets[i]);
        console.info(i);
    }
    console.info('----------END LOOP--------------------');

    //here i get the same items
    console.info(stgTweets[0]);
    console.info(stgTweets[1]);

当我打印数组“stgTweet[0] 和 stgTweet[1]”的不同索引号时,会显示相同的数据。我试图通过在 for 循环中记录元素来解决这个问题,但这看起来很好。而且我真的不知道该往哪里看。

我如何用不同的对象而不是同一个对象填充数组,上面的脚本中发生了什么。

以下是 srcTweets 的示例:

[
   Object   {
      _id="56e19eb1ac5e621e0797c423",
      truncated=false,
      text="@Model_Symphony nu ja,
      s... prima Energiequelle...",
      more...
   },
   Object   {
      _id="56e1a73eac5e621e0797c424",
      truncated=false,
      text="Vandaag aangekondigd doo...",
      more...
   },
   Object   {
      _id="56e1a7b4ac5e621e0797c425",
      truncated=false,
      text="Mooi bedrijfsbezoek aan ...",
      more...
    }
]

【问题讨论】:

    标签: javascript arrays json node.js object


    【解决方案1】:

    原因是因为您为数组中的每个元素重复使用相同的对象,并且对象是通过 Javascript 中的引用分配的,所以stgTweets[0] === stgTweets[1]

    您可以做的是将您的stgTweet 声明移到循环(或直接重新分配值,如下所示),以便为每个数组元素创建一个新对象:

    var stgTweets = new Array(aantalSrcTweets);
    for (var i = 0; i < aantalSrcTweets; i++){
      stgTweets[i] = {
        Id: srcTweets[i]._id,
        userId: srcTweets[i].user.id,
        userFollowerCount: srcTweets[i].user.followers_count,
        userFriendCount: srcTweets[i].user.friends_count,
        userFavouritesCount: srcTweets[i].user.favourites_count,
        text: srcTweets[i].text,
        coordinates: srcTweets[i].coordinates,
        userLocation: srcTweets[i].user.location
      };
    }
    

    【讨论】:

    • 非常感谢!!你真的很聪明..我不能在 4 分钟内接受答案。所以如果你已经准备好了,我会做大约 30 分钟 :-)
    猜你喜欢
    • 2021-04-26
    • 1970-01-01
    • 2020-10-25
    • 2014-08-27
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 2018-07-09
    • 2012-08-13
    相关资源
    最近更新 更多