首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript/NodeJS传递byref

Javascript/NodeJS传递byref
EN

Stack Overflow用户
提问于 2017-11-26 20:16:15
回答 1查看 392关注 0票数 0

我还在学JS。在其他语言中,您可以通过them传递变量,然后在代码的其他地方修改它们。

为了避免出现大量重复代码,我构造了一系列回调和解析,如下所示:

代码语言:javascript
复制
class MarketData {
   constructor() {
      //Arrays
      this.OneMinuteData = [];
      this.ThreeMinuteData = [];
      this.initializeCandleData();
   }

   initializeData() {
      var client = new Client();
      this._initializeData(60, client, this.OneMinuteData);
      this._initializeData(180, client, this.ThreeMinuteData);
   }

   _initializeData(granularity, client, dataStore) {
      client.GetRates({ granularity: granularity }, function(err, msg, data) {
         var items = data.map(item => ({
            ///data mapped here
         }));
         dataStore = dataStore.concat(items);
      }
}

因此,本质上,我有这个‘私有’_initializeData函数,希望传入一个数组并将它添加到数组中,但是由于JS通过了not,我无法达到预期的效果(例如,this.OneMinuteData数组没有被修改)。

正因为如此,我目前知道如何解决这个问题的唯一方法就是对每个单独的数组进行相同的函数复制-粘贴,我发现这是非常草率的。有更好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-26 20:25:02

但是,由于JS是由not传递的,所以我无法达到预期的效果(例如,this.OneMinuteData数组没有被修改)。

虽然JavaScript确实按值传递,但在处理对象(包括任何数组)时,该值是引用。

请参阅concat文件

concat()方法用于合并两个或多个数组。此方法不更改现有数组,而是返回一个新数组。

因此,当您说dataStore = dataStore.concat(items);时,您将一个新数组分配给本地dataStore变量,并丢弃旧的数组。

在函数之外,原始数组不变。

分配给OneMinuteData的数组未被修改的原因是您从未修改过任何数组。

items的值推入dataStore中。

代码语言:javascript
复制
dataStore.push.apply(dataStore, items);

注意:GetRates有异步函数的签名,所以请确保在修改OneMinuteData之前不要尝试检查它们。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47500613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档