Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Google Apps脚本上的预定义组形成集群_Javascript_Arrays_Google Apps Script_Google Sheets Api - Fatal编程技术网

Javascript 使用Google Apps脚本上的预定义组形成集群

Javascript 使用Google Apps脚本上的预定义组形成集群,javascript,arrays,google-apps-script,google-sheets-api,Javascript,Arrays,Google Apps Script,Google Sheets Api,我目前正在使用Google Apps脚本/javascript创建距离矩阵。目前,我有50个地址,我想根据它们的州代码对它们进行分组 我已过滤出相关的状态代码(表名:“过滤状态”)。我已经过滤掉了与这些州代码匹配的地址(表名:“过滤地址”) 现在,我的目标是生成一个脚本,将地址列表与状态代码进行比较,并根据状态代码是否与过滤后的状态代码匹配,将地址排序到数组中 到目前为止,我已经编写了一个脚本,用于根据过滤后的状态代码交叉检查地址。但是,结果提供了一个地址列表,而不进行任何排序 function

我目前正在使用Google Apps脚本/javascript创建距离矩阵。目前,我有50个地址,我想根据它们的州代码对它们进行分组

我已过滤出相关的状态代码(表名:“过滤状态”)。我已经过滤掉了与这些州代码匹配的地址(表名:“过滤地址”)

现在,我的目标是生成一个脚本,将地址列表与状态代码进行比较,并根据状态代码是否与过滤后的状态代码匹配,将地址排序到数组中

到目前为止,我已经编写了一个脚本,用于根据过滤后的状态代码交叉检查地址。但是,结果提供了一个地址列表,而不进行任何排序

function maps(origin, destination) {
  var driving = Maps.DirectionFinder.Mode.DRIVING
  var transit = Maps.DirectionFinder.Mode.TRANSIT
  var modeSet = driving
  var directions = Maps.newDirectionFinder()
  .setOrigin(origin)
  .setDestination(destination)
  .setMode(modeSet)
  .setOptimizeWaypoints(true)
  .getDirections()
  var result = directions
  return result;         

}

function sorting() {
 //get distance
  var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Maps");
  var relstatecodes = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Filtered States");
  //relstatecodes are the filtered states that will form the clusters
  var reladdresses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Relevant Addresses");
  //reladdresses are the full addresses that match the filtered states
  var lastrow = relstatecodes.getLastRow();
  var lastrow2 = reladdresses.getLastRow()
  var range = relstatecodes.getRange(3,1, lastrow-1,1);   //list starts from row 3
  var range2 = reladdresses.getRange(2,3, lastrow2-1,3); //list starts from row 2 col3
  var statecodes = range.getValues();
  var stateaddresses = range2.getValues()
  var storage = []

  for (var y = 0; y < statecodes.length; y++) //sorting addresses into clusters
  {
    var sort = []
    for (var x = 0; x < stateaddresses.length; x++) //checking if addresses match the filtered state codes
    { if ( x[0] == y[0]) {
      sort.push(x[0])
      storage.push(sort)
    }
    }
  }
 console.log(storage);
}

根据我从您的问题中了解到的情况,此代码可以帮助您按照所需的方式对地址进行排序:

代码 输出 我所做的是使用状态代码和这些值获取数组,检查该单词是否在
stateaddresses
中的地址中,如果状态代码在那里,则将地址添加到
clustorbj


另外,我将留下此文档,以备您查看,因为它可能有助于您的项目开发。

根据我从您的问题中了解的情况,此代码可以帮助您按照您想要的方式对地址进行排序:

代码 输出 我所做的是使用状态代码和这些值获取数组,检查该单词是否在
stateaddresses
中的地址中,如果状态代码在那里,则将地址添加到
clustorbj


另外,我将留下此文档,以备您查看,因为它可能有助于您的项目开发。

这正是我要找的。它工作得很好!感谢您也提供了最佳实践文档,因为下一步是处理批处理操作:)您知道我如何根据匹配的状态代码生成单独的数组或字典吗?例如,所有带有AZ代码的地址都会在一个数组中,我可以稍后参考?感谢您接受我的答案,因为答案是正确的,我对您要求的代码进行了一点编辑谢谢您编辑代码。它现在以我想要的方式显示集群。这正是我想要的。它工作得很好!感谢您也提供了最佳实践文档,因为下一步是处理批处理操作:)您知道我如何根据匹配的状态代码生成单独的数组或字典吗?例如,所有带有AZ代码的地址都会在一个数组中,我可以稍后参考?感谢您接受我的答案,因为答案是正确的,我对您要求的代码进行了一点编辑谢谢您编辑代码。它现在以我想要的方式显示集群。
['1000 S Fremont Ave #5, Alhambra, CA 91803, United States',
'4021 Rosewood Ave, Los Angeles, CA 90004, United States' , '919 S Grand Ave, Los Angeles, CA 90015, United States', 
'17335 N Palm Bluffs Ave, Fresno, CA 93711, United States',
'6363 Sunset Blvd, Los Angeles, CA 90028, United States'], ['1365 N Scottsdale Rd, Scottsdale, AZ 85257, United States',
'350 W Washington St, Tempe, AZ 85281, United States',
'501 E. Orange St., Tempe, AZ 85287, United States']...
function sorting() {
 //get distance
  var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Maps");
  var relstatecodes = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Filtered States");
  var reladdresses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Relevant Addresses");
  var lastrow = relstatecodes.getLastRow();
  var lastrow2 = reladdresses.getLastRow()
  var range = relstatecodes.getRange(3,1, lastrow-2,1);
  var range2 = reladdresses.getRange(2,3, lastrow2-1,1);
  
  var statecodes = range.getValues();
  var stateaddresses = range2.getValues();
  var reladdresses = [];
  var clusterObj = {};
  
  // Let´s iterate through the array with the state codes
  statecodes.forEach(function(el){
     clusterObj[el] = [];
    // We take all the state addresses
    for(var i in stateaddresses){
      // We check if the state address includes the state code 
      if( stateaddresses[i].toString().indexOf(" " + el + " ") > - 1){
         // If it is included then we build the JavaScript object
        clusterObj[el].push(stateaddresses[i][0]);
      }
    }
  });
  
   // Logger.log(clusterObj);
  
  // You can check in this way the addresses by state code
  Logger.log(clusterObj["AZ"]);
  Logger.log(clusterObj["CA"]); 
 
}
 [1365 N Scottsdale Rd, Scottsdale, AZ 85257, United States, 350 W Washington St, Tempe, AZ 85281, United States, 501 E. Orange St., Tempe, AZ 85287, United States, 2323 W 14th St, Tempe, AZ 85281, United States, 1555 W University Dr #103, Tempe, AZ 85281, United States,  2844 West Deer Valley Road, Phoenix, AZ 85027, United States]
[19-11-06 15:55:56:760 CET] [1000 S Fremont Ave #5, Alhambra, CA 91803, United States, 4021 Rosewood Ave, Los Angeles, CA 90004, United States, 919 S Grand Ave, Los Angeles, CA 90015, United States, 7335 N Palm Bluffs Ave, Fresno, CA 93711, United States, 6363 Sunset Blvd, Los Angeles, CA 90028, United States, 9331 Mariposa Rd, Hesperia, CA 92344, United States, 2041 Business Center Dr, Irvine, CA 92612, United States, 5757 Plaza Dr #100, Cypress, CA 90630, United States, 257 Longford Dr #5, South San Francisco, CA 94080, United States, 151 Innovation Dr, Irvine, CA 92617, United States, 5 Hutton Centre Dr #500, Santa Ana, CA 92707, United States, 8620 Spectrum Center Boulevard Suite 600, San Diego, CA 92123, United States]