2014-11-22 197 views
0

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

中的类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); 
    } 
} 

现在,我有可变输出[列表项,列表项,列表项,列表项] 这样我就可以使用。长度并获得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)) { 

如果项目是一个数组,我们如何可以使用已经拥有自己的财产?这不属于一个对象吗?数组是否成为对象?

我的问题是两类折叠。

类别#1 hasOwnProperty发生了什么? -Does阵列成为一个对象,从而可以传递给.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与原型(模糊理解)有关,在这种情况下似乎不是这种情况,它必须依赖于我早先通过混淆描述的对象。

为了澄清我想: 我想有自己的数组listItems中的每一行,所以我可以比较的指标值排序为我目前的列标题是日期

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

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

+0

我认为你应该首先压缩你的问题。相信我,没有人会读到 – Sajidkhan 2014-11-22 02:44:09

+2

我认为整个思考过程应该包括在内以理解问题的演变。结果的最终愿望和途中的主要障碍。 – JForgie 2014-11-22 03:05:04

+0

为什么使用hasownproperty时,在使用in或带有可数据的非数据原型成员的数据对象时,可以使用http:// stackoverflow。com/questions/3010840/loop-through-array-in-javascript/3010848#3010848 – HMR 2014-11-22 03:14:05

回答

1

的阵列可以是一个对象作为成员的值的内部:

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

上述目的具有一个部件,一个名称/值对,其中,成员的值是一个数组。

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

Link To JSON.org JSON explained by Mozilla 有网站,将测试一个对象的有效性:

Link to JSONLint.com

的阵列具有的元件,并且在数组元素可以是其他阵列。所以,可以在数组内部有数组。

.hasOwnProperty返回truefalse

Documentation hasOwnProperty

有趣的是,我可以使用应用脚本的hasOwnProperty方法在阵列上,而不会产生一个错误:

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

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

    Logger.log(anArrayTest); 
} 

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

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

这里是一个职位,与添加的属性在JavaScript对象涉及:

StackOverflow Link

您可以使用点表示法:

objName.newProperty = 'newvalue'; 

或支架

objName["newProperty"] = 'newvalue'; 

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

+0

谢谢@Sandy好,当我能够这样做时,我会很乐意返回并且高兴。这非常有帮助。 – JForgie 2014-11-25 02:46:49