2016-03-16 23 views
0

我是JS的新手。如何迭代javascript對象並在每個值上運行函數

我在NetSuite中設置了一個保存的搜索,它爲我們提供了我們項目的圖像字段(包含URL)。我現在在NS中設置一個腳本來測試這些字段,以查看哪些項目字段返回404(即需要修復)。

我的問題是,如何設置功能imageURLValidator遍歷函數searchItems的字段值?

下面是我開始的過程,但顯然有很多不正確的語法。

function imageURLValidator() { 
    var searchResults = searchItems('inventoryitem','customsearch529'); 

    var url = ''; 
    var item = ''; 
    var field = ''; 

    //insert loop here to iterate over items in searchResults array 

    //loop through items 
    for (var i = 0, i > searchResults[inventoryObject].length, i++) { 
     item = searchResults.[inventoryObject].[i]; 

     //loop through fields in item 
     for (var f = 2, f > item.length, f++) { 
      field = item[f]; 

      //check URL via item field's value 
      var code = checkURL(item[field].getvalue([field])); 

      //generate error based on code variable 
      createErrorRecord(code,item,field) 
     } 
    } 
} 

function searchItems(type, searchid) { 
    //defining some useful variables that we will use later 
    var inventoryArray = []; 
    var count = 0; 

    //loading the saved search, replace the id with the id of the search you would like to use 
    var inventoryItemSearch = nlapiLoadSearch(type, searchid); 

    //run the search 
    var inventoryItemResults = inventoryItemSearch.runSearch(); 

    //returns a js array of the various columns specified in the saved search 
    var columns = inventoryItemResults.getColumns(); 

    //use a do...while loop to iterate through all of the search results and read what we need into one single js object 

    do { 
     //remember the first time through the loop count starts at 0 
     var results = inventoryItemResults.getResults(count, count + 1000.0); 

     //we will now increment the count variable by the number of results, it is now no longer 0 but (assuming there are more than 1000 total results) will be 1000 
     count = count + results.length; 

     //now for each item row that we are on we will loop through the columns and copy them to the inventoryObject js object 
     for (var i=0; i<results.length; i++){ 
      var inventoryObject = {}; 
      for (var j=0; j<columns.length; j++){ 
       inventoryObject[columns[j].getLabel()] = results[i].getValue(columns[j]); 
      } 

      //then we add the inventoryObject to the overall list of inventory items, called inventoryArray 
      inventoryArray.push(inventoryObject); 
     } 

    //we do all of this so long as the while condition is true. Here we are assuming that if the [number of results]/1000 has no remainder then there are no more results   
    } while (results.length != 0 && count != 0 && count % 1000 == 0); 

    return inventoryArray; 
} 

function checkURL(url) { 
    var response = nlapiRequestURL(url); 
    var code = response.getCode(); 

    return code; 
} 

function createErrorRecord(code,item,field) { 
    if (code == 404){ 
     //create error record 
     var errorRecord = nlapiCreateRecord('customrecord_item_url_error'); 
     errorRecord.setFieldValue('custrecord_url_error_item', item); 
     errorRecord.setFieldValue('custrecord_url_error_image_field', field); 
    } 
} 
+0

你正面臨什麼問題? 注意:for循環假設像'for(initialization; condition; increment)' 檢查是否問題出在哪裏。 –

+0

只要出現語法錯誤,您不應該期望您的代碼工作。先解決這些問題然後看看它有什麼作用。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference並不是一個糟糕的地方。 – BPS

+0

函數* nlapiLoadSearch *做了什麼? –

回答

1

在這裏我可以看到SearchResult所變量將同時循環空。由於您致電searchItems函數是異步的。這將需要一些時間來執行,因爲我猜它會從API中獲取數據。當它返回值時,你的循環也會被執行。您可以通過將警報(searchResults.length)或console.log(searchResults.length)進行測試。對於那些需要使用回調函數

而且就算你得到的結果在SearchResult所。你正在做的循環是錯誤的。你將得到的數組就像[{},{},{}],即對象數組。

要訪問你需要

for (var i = 0, i > searchResults.length, i++) { 
     var inventoryObject = searchResults[i] // your inventoryObject 

    for(var key in inventoryObject){ 
     item = inventoryObject[key]; // here you will get each item from inventoryObject 
     //loop through fields in item 
     for (var f = 2, f > item.length, f++) { 
      field = item[f]; 

      //check URL via item field's value 
      var code = checkURL(item[field].getvalue([field])); 

      //generate error based on code variable 
      createErrorRecord(code,item,field) 
     } 
    } 
} 

而且是歡迎的Javascript

+0

太棒了!這很有幫助。這是我正在查找的(var inventory in key)語法。 – jdcaliff

相關問題