2014-11-22 195 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