Javascript 对于JS来说,变得更加面向对象

Javascript 对于JS来说,变得更加面向对象,javascript,netsuite,Javascript,Netsuite,我一直想变得更糟糕。我用NetSuite开发了一点,他们的API是用JS编写的。我有下面的代码。下面是is的工作 1) 搜索API会搜索水中的所有事务 2) 循环遍历所有事务,然后搜索这些事务中的每个事务,然后对它们进行另一次搜索。原因是NetSuite的API治理只允许1000行搜索API(这也可以通过其他方式解决)。也希望这样做,因为将在其他逻辑中工作,这将使这种方式成为必要 3) 然后将从记录中创建的这些值(item、quantity)推送到三个数组中。 4) 最后一个循环遍历这三个数组,

我一直想变得更糟糕。我用NetSuite开发了一点,他们的API是用JS编写的。我有下面的代码。下面是is的工作

1) 搜索API会搜索水中的所有事务

2) 循环遍历所有事务,然后搜索这些事务中的每个事务,然后对它们进行另一次搜索。原因是NetSuite的API治理只允许1000行搜索API(这也可以通过其他方式解决)。也希望这样做,因为将在其他逻辑中工作,这将使这种方式成为必要

3) 然后将从记录中创建的这些值(item、quantity)推送到三个数组中。 4) 最后一个循环遍历这三个数组,但随后打印出项目和根据数量值的次数创建的事务。这是因为我们将把它们打印为每个项目的标签

现在我一直想变得更加OO。我做了另一件类似的事情,在对象中循环使用键和值。我觉得这很好。我的问题是,你如何让这更像OO。我有一些想法,但我想听听一些想法

1) 创建一些调用步骤3和步骤4的函数。所以每次它循环调用函数
2) 我想做一些回电或承诺。在这种情况下,它们可能没有用处,但是 3) 将项推送到对象中,然后在这些对象上运行forEach方法

因此,问题是如何使用JavaScript使这种OO风格更加丰富

//搜索API
过滤器=[];
筛选器[0]=新的nlobjSearchFilter('location',null',anyof',['23','25','20','24']);
filters[1]=新的nlobjSearchFilter('mainline',null,'is','true');
var列=[];
列[0]=新的nlobjSearchColumn('tranid');
列[1]=新的nlobjSearchColumn('createdfrom');
var搜索结果=[];
var searchResults=nlapiSearchRecord('itemReceive',null,filters,columns);
tranId=[];
createdFrom=[];
数量=[];
项目=[];
数据='';
如果(搜索结果){
对于(变量i=0;i<5;i++){
//获取所有内部ID
var-tranId=searchResults[i].getValue(列[0]);
filtersLine=[];
filtersLine[0]=新的nlobjSearchFilter('tranid',null',is',tranid);
filtersLine[1]=新的nlobjSearchFilter('mainline',null',is','false');
var columnsLine=[];
columnsLine[0]=新的nlobjSearchColumn('item');
columnsLine[1]=新的nlobjSearchColumn('createdfrom');
columnsLine[2]=新的nlobjSearchColumn('quantity');
var searchResultsLine=[];
var searchResultsLine=nlapisarchrecord('itemrearch',null,filtersLine,columnsLine);
对于(var j=0;j}
您正在对每个搜索结果进行搜索,这将对您的治理点产生影响。我检查了代码,发现没有必要使用那么多搜索。我已经重构了代码以使用更多的函数,并且我嵌套了函数,这应该使它更可读和可伸缩。我还添加了几个过滤器,以避免获得比您需要的更多的数据。无论如何,这是代码,欢迎您进一步优化它

var itemsToProcess = getItemsToProcess();
var data = getDataString(itemsToProcess);

//**** HELPER FUNCTIONS ****//
function getItemsToProcess(){
    // search APIs
    var filters = [];
    filters.push(new nlobjSearchFilter('location', null, 'anyof', ['23','25','20','24']));
    filters.push(new nlobjSearchFilter('createdfrom', null, 'isnotempty'));
    filters.push(new nlobjSearchFilter('quantity', null, 'greaterthan', 0)); //Filtering out items with no quantity
    filters.push(new nlobjSearchFilter('mainline', null, 'is', 'F')); //Dont want to get any extra info
    filters.push(new nlobjSearchFilter('shipping', null, 'is', 'F')); //Dont want to get any extra info
    filters.push(new nlobjSearchFilter('cogs', null, 'is', 'F')); //Dont want to get any extra info
    filters.push(new nlobjSearchFilter('taxline', null, 'is', 'F')); //Dont want to get any extra info

    var columns = [];
    columns.push(new nlobjSearchColumn('item'));
    columns.push(new nlobjSearchColumn('createdfrom'));
    columns.push(new nlobjSearchColumn('quantity'));

    var searchResults = fullSearch('itemreceipt', filters, columns);

    var rows = [];
    for(var i in searchResults){
        var result = {};
        result.item = searchResults[i].getText(columnsLine[0]);
        result.createdFrom = searchResults[i].getText(columnsLine[1]);
        result.quantity = searchResults[i].getValue(columnsLine[2]);
        rows.push(result);
    }
    return rows;

    //**** HELPER FUNCTIONS ****//
    function fullSearch(type, filters, columns){
        var search = nlapiCreateSearch(type, filters, columns);
        var resultset = search.runSearch();
        var resultsets = [];
        var returnSearchResults = [];
        var searchid = 0;
        var startdate, enddate, resultslice;
        /* Grabs results first */
        do {
            resultslice = getResultSlice(resultset, searchid);
            for (var rs in resultslice) {
                returnSearchResults.push(resultslice[rs]);
                searchid++;
            }
        } while (resultslice.length == 1000);

        return returnSearchResults;

        //*********** HELPER FUNCTION ***********/
        function getResultSlice(resultset, searchid){
            var resultslice = resultset.getResults(searchid, searchid + 1000);
            return resultslice || [];
        }
    }

}

function getDataString(itemsToProcess){
    var data = '';
    for(var i in itemsToProcess){
        data += printItem(itemsToProcess[i].item, itemsToProcess[i].createdFrom, itemsToProcess[i].quantity);
    }
    return data;

    //**** HELPER FUNCTIONS ****//
    function printItem(item, createdFrom, quantity){
        var tempString = '';
        for (var x = 0; x < quantity; x++){
            console.log(item + ' ' + createdFrom.substring(16));
            tempString += item + createdFrom + '\n'; 
        }
        return tempString;
    }
}
var itemsToProcess=getItemsToProcess();
var data=getDataString(itemsToProcess);
//****辅助函数****//
函数getItemStopProcess(){
//搜索API
var过滤器=[];
push(新的nlobjSearchFilter('location',null',anyof',['23','25','20','24');
push(新的nlobjSearchFilter('createdfrom',null,'isnotempty');
push(新的nlobjSearchFilter('quantity',null,'greaterthan',0));//筛选出没有数量的项目
push(新的nlobjSearchFilter('mainline',null,'is','F');//不想获取任何额外信息
push(新的nlobjSearchFilter('shipping',null,'is','F');//不想获取任何额外信息
filters.push(新的nlobjSearchFilter('cogs',null,'is','F');//不想获取任何额外信息
push(新的nlobjSearchFilter('taxline',null,'is','F');//不想获取任何额外信息
var列=[];
columns.push(新的nlobjSearchColumn('item'));
push(新的nlobjSearchColumn('createdfrom');
push(新列('quantity');
var searchResults=fullSearch('itemreignment',过滤器,列);
var行=[];
for(搜索结果中的var i){
var result={};
result.item=searchResults[i].getText(columnsLine[0]);
result.createdFrom=searchResults[i].getText(columnsLine[1]);
result.quantity=searchResults[i].getValue(columnsLine[2]);
行。推送(结果);
}
返回行;
//****辅助函数****//
函数fullSearch(类型、筛选器、列){
var search=nlapiCreateSearch(类型、筛选器、列);
var resultset=search.runSearch();
var结果集=[];
var returnSearchResults=[];
var-searchid=0;
var startdate、enddate、resultslice;
/*先抓结果*/
做{
resultslice=getResultSlice(resultset,searchid);
for(resultslice中的var rs){
returnSearchResults.push(resultslice[rs]);
searchid++;
}
}while(结果)