使用列映射更快地查找列

发表在1月11日

说实话吧。当您使用Smartsheet API时,寻找正确的列可能很乏味。API为您提供了一个列对象数组,您可以通过循环查找匹配的对象columnName你在寻找的东西。一旦找到所需的列,就可以获取columnId——因为要通过API对列执行任何操作,您需要columnId

Smartsheet JavaScript SDK您也可以通过调用来获取列getSheet ()getColumns ().在这种情况下,我们选择forgetSheet

要开始工作,请使用有效的对象初始化Smartsheet客户端对象访问令牌,并创建变量sheetIddateColumnName,dateColumnId

常量客户端需要“内容”常量内容客户端createClientaccessTokensmartsheet_access_token常量sheetId3378835908519812常量dateColumnName“生日”//列的标题dateColumnId0//变量保存列的id

使用内容对象和sheetId,获取工作表,遍历各列以找到Birthday列,并设置为的值dateColumnId

内容getSheetidsheetId然后函数//对于dateColumnNames数组中列出的每个列标题,//获取该列的columnId并将其设置为dateColumnId0<长度++//当列标题与dateColumnName匹配时如果标题= = =dateColumnName//设置dateColumnIddateColumnIdid打破

现在,使用for值dateColumnId来访问生日列中的单元格。但是,当你要求另一列的id时会发生什么呢?您可以初始化更多的值来存储另一列的id和标题。然后,在列循环中添加另一个条件语句,以查找匹配的列标题。在所有这些之后,代码将变得非常混乱。让我们看一个更简洁的方法columnId基于columnTitle.属性的映射或键值对可以实现这一点columnTitle作为钥匙和columnId作为值。

在JavaScript中,创建此映射的最快方法是使用减少函数,一个高阶函数内置于Array.prototype.如载于MDN网络文档reduce方法“执行一个reducer函数…在数组的每个成员上,产生单个输出值。”在本例中,该函数将把columns数组缩减为包含列标题和id的单个对象。

让我们回到响应getSheet前面使用的函数。而不是循环sheet.columns调用sheet.columns.reduce ()

常量columnMap减少reducerFunction

在这个reduce函数中,传递了两个参数:reducerFunction将在columns数组中的每个元素上执行,而{}初始化累加器值。该累加器值将在每次reducerFunctionexecute——它将在columns数组中的每个元素上执行。的reducerFunction也会有两个参数,看起来像这样:

常量reducerFunctiontempMap上校= >tempMap上校标题上校id返回tempMap

tempMap是初始化的累加器值吗{},上校代表了正在被执行的对象数组元素。该函数使用列标题设置键,值为列id。当reduce ()完成映射的结果如下所示。

的名字4615776901588868生日3489876994746244

现在,要获取列的id,而不是遍历columns数组,只需调用columnMap使用所需列的标题。

columnMap“生日”

这只是使应用程序代码更优雅的几种方法之一。请在下面的评论中告诉我们,如果你在使用Smartsheet API时遇到了其他令人痛苦的地方,或者如果你有任何优雅的解决方案想要与Smartsheet开发者社区分享。

评论

评论