2017-03-04 58 views
1

我想創建一個函數來搜索單元格中的正則表達式,並返回給定的值,如果找到結果。 該函數適用於每個單元格,但我無法通過將該函數應用於B1:B10而不僅僅是B10來實現該功能。我希望它能夠像數組一樣工作來加速函數。 當我將pagetype函數應用於數組時,我收到此錯誤消息。 TypeError:在對象yfhhh中找不到函數搜索。 (第13行)。 我明白,我需要以某種方式編輯功能,有它工作的單元格區域,但我不知道如何......這是我的代碼:使用谷歌腳本數組中的搜索功能

function pageType(string) { 
 
    if (string.map)   // Test whether input is an array. 
 
    return string.map(page); // Recurse over array if so. 
 
    else { 
 
    return page(string); 
 
    } 
 
} 
 

 
function page(url) { 
 
var productpage = /.*\.html.*/ 
 
var homepage = /^http:\/\/www\.domain.com\/$/ 
 
var categorypage = /^http:\/\/www\.domain\.com\/.*/ 
 
    if (url.search(categorypage) > -1) 
 
    return "Category Page"; 
 
    if (url.search(productpage) > -1) 
 
    return "Product Page"; 
 
    if (url.search(homepage) > -1) 
 
    return "Homepage"; 
 
     else 
 
    return "Brand Page"; 
 
     }

+0

如果您將函數應用於單元格範圍內,則string是數組數組,每個數組表示一行。所以你可以嘗試'返回string.map(函數(行){返回row.map(頁)})' – SpiderPig

+0

感謝@SpiderPig,這種變化做我所需要的和有意義的,所以我正在應用函數的每一行範圍 –

回答

1

沒有search()方法的數組。數組是更廣泛的對象類別的子類別。然後是一個JSON對象,它是一個對象。

對象 - 包括

  • JSON對象{ '鍵': '值'}
  • 陣列[ '元素1', 'element2的']

數組是一個子類別一個東西。將一個數組作爲一個對象調用有點令人困惑。但這就是錯誤信息正在做的事情。

因爲您使用RegEx,所以不能使用indexOf(),這是一個字符串和數組的方法。

您可以在陣列隱蔽的字符串:

var myArray = myArray.toString(); 

,然後搜索匹配的字符串。在你的情況下,你正在返回一個預定義的值,所以這應該工作。在找到匹配項之後,似乎並不需要從數組中提取某些內容。這將需要更多的處理。

if (typeof url === 'object') {//If data is an array 
    url = url.toString(); 
} 
+0

這是一個好主意。這樣你就可以在一次搜索中搜索整個數組。而不必遍歷每個元素。我必須記住這一點。謝謝 – Cooper

+0

感謝您的詳細解釋!我已經使用了這個解決方案並按我的要求工作,但有一件事我不明白。 url.toString將我的範圍(可以說是A1:A3)轉換爲逗號分隔的字符串:www.domain.com,www.domain.com/nike,www.domain.com/redtrainers.html。 函數頁面搜索轉換後的字符串中的每個單獨元素,所以我得到了A1:A3中每個值的結果。但是,如果我在一個已經具有www.domain.com,www.domain.com/nike,www.domain.com/redtrainers.html價值的單元上應用頁面功能,我只能得到一個結果? –

+0

JavaScript方法search()返回第一個匹配的開始位置。如果有多個匹配項,search()方法不會返回多個起始位置編號。 [JavaScript信息 - 用Reg Ex搜索](https://www.w3schools.com/js/js_regexp.asp)這是否回答你的問題?如果我的答案解決了您的問題,您可以通過點擊大綠色複選標記將其標記爲正確。 –