【问题标题】:Google Sites ListitemGoogle 协作平台列表项
【发布时间】:2014-11-22 02:26:14
【问题描述】:

我正在使用 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);
  }
}

现在我希望能够获取列表项的每一行并将其放入自己的数组中。

我可以添加变量

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 是一个数组,我们如何使用 has own property?那不属于一个对象吗?数组会变成对象吗?

我的问题分为两类。

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

类别 #2 这是从列表项中获取值并填充数组的唯一方法吗 - 如果是,有什么方法可以分隔,所以我可以将每一行传递到它自己的数组中 - 如果不是,为什么它可以与 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);
      }

其中我得到一个“无效参数:名称(第 41 行”响应。突出显示

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

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

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

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

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

非常感谢这位 2 周的 JS 初学者的任何和所有帮助。

【问题讨论】:

  • 我认为您应该首先压缩您的问题。相信我,没有人会读完所有这些
  • 我认为应该包括整个思考过程以了解问题的演变。对结果的终极渴望和路上的主要障碍。
  • 为什么在使用 for in 遍历数组或具有可迭​​代非数据原型成员的数据对象时使用 hasownproperty 在这里解释:stackoverflow.com/questions/3010840/…
  • 感谢 HMR。我会看看那个。最初是比较数组索引并返回匹配结果吗?
  • 是的,但是在循环中使用 for 时不能保证顺序。没有看到您的回复,因此在回复某人时,您可以使用 at 符号 @ 后跟用户名,以便他们收到通知。对问题或答案发表评论将通知发布问题或答案的人,因此除非您对评论发表评论,否则不需要 @

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


【解决方案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';

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

【讨论】:

  • 谢谢@Sandy Good,当我能够这样做时,我会很乐意返回并投票。这非常有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2018-07-19
  • 2011-11-13
相关资源
最近更新 更多