Google协作平台Listitem

时间:2014-11-22 02:26:14

标签: javascript google-apps-script google-sites

我正在使用Google网站列表项。

课程为HereHere

我已经能够遍历列并使用以下代码将所有列标题放入一个数组中。

//Global
 var page = getPageByUrl(enter URL here)
 var name = page.getName();
 function getInfo() {
 var columns = page.getColumns();
   //Get Column Names
 for (var j in columns) {
    var cName =columns[j].getName();
    columnList.push(cName);
  }
}

现在我希望能够获得listitem的每一行并将其放在自己的数组中。

我可以添加变量

function getInfo() {
 var columns = page.getColumns();
 var listItems = page.getListItems();//new variable
   //Get Column Names
 for (var j in columns) {
    var cName =columns[j].getName();
    columnList.push(cName);
  }
}

现在我有变量输出是[ListItem,ListItem,ListItem,ListItem] 所以我可以使用.length并获得4的回报。 所以现在我知道我有4行数据,所以根据我的需要,我需要4个数组。

这里的小插曲,不是交易的编码器,而是代码作为想要成为需求的先驱。

我的一个伙伴,他是一个JS编码器,通过交易向我展示了这个代码,它确实有效。记录器由我添加。

for (var i in listItems) { 
  if (listItems.hasOwnProperty(i)) {
      item = listItems[i];
        for (var x = 0; x < columnList.length; x++) {
          attrib = item.getValueByName(columnList[x]);
          Logger.log("Logging value of get list page get value by name = " + columnList[x] + " " + attrib);
      }
     }
     }

这使得总代码

var name = page.getName();
var listItems = page.getListItems();
var listCount = listItems.length
var listList = [];
var columns = page.getColumns();
var name = columns[0].getName();
var item, attrib = 0;
var columnList = [];
Logger.log(listItems);
Logger.log(name + " was last updated " + page.getLastUpdated());
Logger.log(name + " was last edited " + page.getLastEdited());
var listCount = 0;

//Get Column Names
  for (var j in columns) {
      var cName =columns[j].getName();
      columnList.push(cName);
  }
  Logger.log(columnList);
   // Get index of Due Date   
  var dueDateValue = columnList.indexOf("Due Date");
  Logger.log("The index of due date is " + dueDateValue);

for (var i in listItems) { 
if (listItems.hasOwnProperty(i)) {
    item = listItems[i];
    for (var x = 0; x < columnList.length; x++) {
        attrib = item.getValueByName(columnList[x]);
        Logger.log("Logging value of get list page get value by name = " + columnList[x] + " " + attrib);
      }
     }
     }



}`

原谅上面的代码,因为它已经尝试解决这个问题。 我有点落后于理解这里发生的事情

for (var i in items) { // This is for each item in the items array
    if (items.hasOwnProperty(i)) {   

如果items是一个数组,我们如何使用拥有自己的属性?不属于某个对象吗?数组是否成为对象?

我的问题有两个类别。

类别#1 hasOwnProperty发生了什么? - 数组是否成为对象,因此可以传递给.hasOwnProperty值

类别#2 这是获取listitem中的值并填充数组的唯一方法 - 如果是,是否有某种方式来划分,所以我可以将每一行传递到它自己的数组中 - 如果它不是,为什么它与hasOwnProperty一起使用,为什么在下面的例子中它没有它呢?

for (var i in listItems) {
    for (var y = 0; y < columnList.length; y++) {
     item = listItems[i];
     listList = item.getValueByName(columnList[x]);
     Logger.log("Logging my version of list naming " + listList);
      }

我得到了一个&#34;无效的参数:name(第41行&#34;响应。突出显示

listList = item.getValueByName(columnList[x]);

不寻找讲义,但我希望进一步了解hasOwnPropertyValue。

我目前的理解是hasOwnValue与原型设计(模糊的理解)有关,在这种情况下似乎并非如此 它必须依赖于我之前通过混淆描述的对象。

澄清我的要求: 我希望将每行listitems放在自己的数组中,这样我就可以比较索引值并按日期排序,因为我当前的列标题是

["Project", "Start Date" , "End Date"]

对于这个为期两周的JS初学者,非常感谢任何和所有的帮助。

1 个答案:

答案 0 :(得分:1)

数组可以在对象内部作为成员的值:

 {"myFirstArray":"[one,two,blue]"}

上面的对象有一个成员,一个名称/值对,其中成员的值是一个数组。

以下是解释JSON的网站链接。

Link To JSON.org JSON explained by Mozilla 有些网站会测试对象的有效性:

Link to JSONLint.com

数组包含元素,数组中的元素可以是其他数组。所以,数组中可以有数组。

.hasOwnProperty会返回truefalse

Documentation hasOwnProperty

有趣的是,我可以在数组的Apps脚本中使用hasOwnProperty方法,而不会产生错误:

function testHasProp() {
  var anArrayTest = [];
  anArrayTest = ['one', 'two', 'blue'];
  Logger.log(anArrayTest);

  var whatIsTheResult = anArrayTest.hasOwnProperty('one');
  Logger.log(whatIsTheResult);

  Logger.log(anArrayTest);
}

结果总是错误的。在数组上使用hasOwnProperty方法不会将数组更改为对象,这是使用返回false的Javascript的错误方法。

您可以将列表值设为对象而不是数组。对象的一个​​优点是能够通过它的属性名称引用值,而不管属性的索引位置。使用数组,您需要知道索引号是什么来检索特定元素。

以下是一篇文章,介绍如何在JavaScript中为对象添加属性:

StackOverflow Link

您可以使用点表示法:

objName.newProperty = 'newvalue';

或括号

objName["newProperty"] = 'newvalue';

向对象添加新名称/值对(属性)。