如何通过变量引用父对象?

时间:2015-06-13 05:08:09

标签: javascript meteor

我的代码一遍又一遍地重复着。它将一个新文档插入名为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);

1 个答案:

答案 0 :(得分: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);
  });
};