【发布时间】:2014-11-22 02:26:14
【问题描述】:
我正在使用 google 网站列表项。
我已经能够使用以下代码遍历列并将所有列标题放入一个数组中。
//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