异步循环数组,对象携带另一个数组

时间:2014-05-23 10:49:58

标签: javascript arrays node.js asynchronous azure-sql-database

我有以下数组,它由一些属性和一个包含更多对象的数组组成。

var array = [
    {
        prop1Name: 'Thing',
        prop2ID: 1
        propArray: [
            {
                innerProp1Name: 'Name 1',
                innerProp2ID: 1
            },
            {
                innerProp1Name: 'Name 2',
                innerProp2ID: 2
            },
        ]
    },
    {
        prop1Name: 'Thing 2',
        prop2ID: 2
        propArray: [
            {
                innerProp1Name: 'Name 1',
                innerProp2ID: 1
            },
            {
                innerProp1Name: 'Name 2',
                innerProp2ID: 2
            },
        ]
    }
]

现在,我的目标是通过Node.JS API将其插入到数据库中。我已经涉足了async.js,但我想知道async.each()内部的async.each()是否可以进入这里。也许我可以在第一个async.each()的迭代器函数中定义它。

该表需要propArray中每个条目的外部属性的ID。 PropArray控制要添加的行。

1 个答案:

答案 0 :(得分:1)

循环遍历嵌套数组,并且当数组和嵌套数组很大时,为每个条目执行db insert非常昂贵。如果db驱动程序允许你进行数组插入(大多数情况下都是这样),那么使用常规for循环将其展平并进行1 db插入会更便宜。像这样的东西:

var array = [ ... ];  // your array
var i, j, outLen, inLen, item, innerItem;
var result = [];

for (i = 0, outLen = array.length; i < outLen; i++) {
  item  = array[i];
  for (j = 0, inLen = item.propArray.length; j < inLen; j++) {
    innerItem = item.propArray[j];
    result.push({
      prop1Name: item.prop1Name,
      prop2ID: item.prop2ID,
      innerProp1Name: innerItem.innerProp1Name,
      innerProp2ID: innerItem.innerProp2ID
    });
  }
}

db.collection.insert(result, ...);

这没有任何错误检查和内部数组的存在。你可能想这样做。