JS For循环计数器不适用于嵌套循环

时间:2019-11-17 09:47:45

标签: javascript google-apps-script

我正在尝试构建基于Google AppsScript的WebApp。我正在一些嵌套的for循环中为API调用准备一个JSON对象。我不知道为什么,但是不能使用第三个嵌套循环中的变量计数。 我试图通过使用计数变量(i,j,k)将一些值推入对象中,但是在if条件内它们不起作用。尽管我可以记录这些计数变量的值,但条件仍然有效,push()命令不起作用。没有错误报告。

var APIPayloadObject = {};
APIPayloadObject.update = [];

for(i=0; i < orders.length; i++){
   ...
   APIPayloadObject.update[i].line_items = [];

   for(j=0; j < lineItems.length; j++){
      APIPayloadObject.update[i].line_items.push({id: lineItems[j].id});
      ...
      for(k=0; k < lineItemMeta.length; k++){
      APIPayloadObject.update[i].line_items[j].meta_data = [];
      // APIPayloadObject.update[i].line_items[j].meta_data.push({id: k}); // This line is not necessary, but works.
      ...
      if( lineItems[j].product_id == productID && lineItemMeta[k].key == 'Utánrendelve' ){
         APIPayloadObject.update[0].line_items[0].meta_data.push({id: lineItemMeta[0].id}); // This works
         APIPayloadObject.update[i].line_items[j].meta_data.push({id: lineItemMeta[k].id}); // Doesn't work
         Logger.log(i+' '+j+' '+k); //prints out "0 0 0"
         Logger.log(APIPayloadObject.update[0].line_items[0].meta_data); // prints out "[]" so it looks like the meta_data array exist
      }
      }
   }
}

您知道为什么不能使用计数器变量将元素推入对象吗?

1 个答案:

答案 0 :(得分:0)

计数器变量不起作用,因为您没有正确声明属性。

APIPayloadObject.update[i].line_items[j].meta_data

在这里,您必须为每个update[i]声明line_itemsupdate,为每个meta_data声明line_items

尝试以下代码,可能会解决您的问题:

var APIPayloadObject = {};
APIPayloadObject.update = [];

for(i=0; i < orders.length; i++){
   //Declaration part
   APIPayloadObject.update[i] = {};
   APIPayloadObject.update[i].line_items = [];
   for(j=0; j < lineItems.length; j++){
   //Declaration part
   APIPayloadObject.update[i].line_items[j] = {};
   APIPayloadObject.update[i].line_items[j].meta_data = [];
      for(k=0; k < lineItemMeta.length; k++){

      if(condition){
         APIPayloadObject.update[0].line_items[0].meta_data.push({id: lineItemMeta[0].id}); // This works
         APIPayloadObject.update[i].line_items[j].meta_data.push({id: lineItemMeta[k].id}); // Doesn't work
         console.log(i+' '+j+' '+k); //prints out "0 0 0"
      }
      }
   }
}