我正在使用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);
}
}
现在我希望能够获得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初学者,非常感谢任何和所有的帮助。
答案 0 :(得分:1)
数组可以在对象内部作为成员的值:
{"myFirstArray":"[one,two,blue]"}
上面的对象有一个成员,一个名称/值对,其中成员的值是一个数组。
以下是解释JSON的网站链接。
Link To JSON.org JSON explained by Mozilla 有些网站会测试对象的有效性:
数组包含元素,数组中的元素可以是其他数组。所以,数组中可以有数组。
.hasOwnProperty
会返回true
或false
。
有趣的是,我可以在数组的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中为对象添加属性:
您可以使用点表示法:
objName.newProperty = 'newvalue';
或括号
objName["newProperty"] = 'newvalue';
向对象添加新名称/值对(属性)。