【问题标题】:How to reference a parent object via a variable?如何通过变量引用父对象?
【发布时间】:2015-06-13 05:08:09
【问题描述】:

我得到了一遍又一遍的代码。它将一个新文档插入到名为 Services 的 Meteor Mongo 集合中,这是一个已在另一个文件 (Services = new Mongo.Collection("services")) 中实例化的全局对象。

  Services.insert({
    sku: 'hdrPhotos',
    price: 100
  });
  Services.insert({
    sku: 'twilightPhotos',
    price: 100
  });
  Services.insert({
    sku: 'videoClips',
    price: 175
  });

我想编写一个函数,该函数接受集合名称和要插入的对象数组,但我不确定如何在我的函数中将集合名称作为变量引用:

var insertIntoCollection = function(collectionName, arrayOfObjects){

  for (index in arrayOfObjects){
    // doesn't work
    // collectionName.insert(arrayOfObjects[index]);
  };

};

它会被称为

  var serviceItems = [{
    sku: 'hdrPhotos',
    price: 100
  },{
    sku: 'twilightPhotos',
    price: 100
  },{
    sku: 'videoClips',
    price: 175
  }];

  insertIntoCollection("Services", serviceItems);

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    试试

    insertIntoCollection(Services, serviceItems);
    

    ....由于您之前的代码 "Services" 是一个字符串,因此您实际上是在函数中调用它:

    "Services".insert(arrayOfObjects[index]);
    

    这显然不是你想要的最终结果……


    在旁注中,不鼓励在数组上使用 key in object 循环...尝试像这样循环遍历它:

    var insertIntoCollection = function(collection, dataArray){
      for (var index=0; index<dataArray.length; index++){
        collection.insert(dataArray[index]);
      };
    };
    

    或者作为替代方案,您可以使用 ECMAScript 5.1 中实现的 .forEach 方法...在您的情况下,您可以像这样使用它:

    var insertIntoCollection = function(collection, dataArray){
      dataArray.forEach(function(item){
        collection.insert(item);
      });
    };
    

    【讨论】:

    • 我现在真的真的很蠢。不是因为字符串的问题(我知道它不会起作用),而是因为我不认为直接将 Services 对象作为参数插入。我认为函数的代码有问题,但我没有正确调用它。
    • 嗯...为什么不鼓励使用key in object?在我的情况下,它只会在数组索引中包含的任何对象上运行 for-in 循环的内容,这些对象都是统一的。
    • See this question and answer 深入解释为什么不鼓励这样做。
    • 哇,这很奇怪。所以 for-in 只对对象安全?我使用 for-in 是因为与普通的 for 循环相比,它的输入速度非常快。但我猜对于数组,没有更短的方法可以安全地循环它们?
    • @fuzzybabybunny 一种快速的方法是在数组上使用.forEach 方法。这在 ECMAScript 5.1 中被设置为标准。 (编辑答案以包括 .forEach 作为当前循环的替代)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2021-06-16
    • 1970-01-01
    相关资源
    最近更新 更多