1. 出现场景: 支付系统需要生成签名加密,有一次我接了一个接口,需要前端的同事传递一个sign参数(表单值按顺序拼接,并拼上私钥值进行md5运算)

问题: js 不像java 有map.list 等集合框架,也没有很现成的排序方法,

js 也不像java 提供jca 等加密框架,对各种加密算法进行支持

解决: 1. 于是就干脆手写了一个javascript 的排序方法,

2.在网上找到一个牛人写的javascript 的 md5.js (此页面还包含其他加密算法的javascript实现)

自定义手写的javascript 的排序js , sortArrString.js

主方法为getKeySort(传入的数组)对象,返回拍过序的数组对象,

内部排序算法是通过: 冒泡排序

规则 :是按字母顺序升序进行排序,按参数名的第一个字母进行比较,如果相同则比较第二个,直到排出大小

js 的 == 可以比较字符串的大小

/*** 测试demo ,假设传入的情况*  是数组,返回数组按字母顺序升序*  @author kzcming*  * var signStr = {account:"97987985",username:"0004",pay_star_type:"pay_star_ggm",service_type:"gm_ibc",game_code  :"1",
}getKeySort(getObjectKey(signStr));*//*** 传入对象 ,返回对象的属性数组*/
function getObjectKey(obj){return Object.keys(obj);
}/*** 传入数组* 按字母顺序,升序* 冒泡排序*/
function getKeySort(strArr){var count = 0;var compareInt = 0;for (var i = 0; i < strArr.length; i++) {for (var j = 0; j < strArr.length - 1 - i; j++) {/*if(strArr [j].substring(0,1) > strArr[j + 1].substring(0,1)){var temp = strArr[j + 1];strArr[j + 1] = strArr[j];strArr[j] = temp;}if(strArr [j].substring(0,1) == strArr[j + 1].substring(0,1)){if(strArr [j].substring(1,2) > strArr[j + 1].substring(1,2)){var temp = strArr[j + 1];strArr[j + 1] = strArr[j];strArr[j] = temp;}}*/compareToIndexValue(strArr,compareInt,j);count ++ ;} }/*console.log("遍历次数:"+count);*//*console.log(strArr);*/return strArr;
}/***  根据首字母 排序,如果首字母相同则根据第二个字母排序...直到排出大小*/
function compareToIndexValue(arr,int,arrIndex){if(arr[arrIndex].substring(int,int+1) == arr[arrIndex + 1].substring(int,int+1)) compareToIndexValue(arr,int+1,arrIndex);//如果第一位相等,则继续比较第二个字符else if(arr[arrIndex].substring(int,int+1) > arr[arrIndex + 1].substring(int,int+1)) {var temp = arr[arrIndex + 1];arr[arrIndex + 1] = arr[arrIndex];arr[arrIndex] = temp}/*else if(arr[arrIndex].substring(int,int+1) < arr[arrIndex + 1].substring(int,int+1)) return;*/return;
}/*** 输入排序过后的key=value 值数组,用  "&" 字符拼接为字符串*/
function getKeyValueSortStr(strArr){var longStr = "";for (var str in strArr) {longStr += strArr[str] + "&";}return longStr.substring(0,longStr.length - 1);//移除最后一个 & 符号
}

我的调用过程

需要注意的是:jquery的serialize()方法,是序列化表单的,通常调用此方法后会直接请求给后台,因此此方法会将一些参数url编码化,会出现%开头的特殊符号和一些其他符号,需要转换成原始值才能签名正确

//实现本地化签名,不需要 在另外一个jsp 页面计算签名function testMD2(){var formParam = $("#bankPay").serialize();//获得参数的 key = value & key2 = value2形式var paraArr = formParam.split("&");//获得key=value 形式值的数组for(var i = 0;i < paraArr.length; i ++){if(paraArr[i].indexOf("=") + 2 > paraArr[i].length){//移除value 为空的参数paraArr.splice(i, 1);i --;}}var sortParaArr = getKeySort(paraArr);var paraStr = getKeyValueSortStr(sortParaArr).replace(/\+/g," ").replace(/%3A/g,":");//得到字符串 , + 是特殊字符,需要转义符号 \console.log(paraStr);var sign = hex_md5(paraStr + priKey);$("#sign").val(sign);}

hex_md5 为md5.js 中的方法

javascript 数组按名称的字母顺序排序相关推荐

  1. 在 JavaScript 中按字母顺序排序 - 如何在 JS 中按名称排序

    有时您可能有一个单词数组,您希望按字母顺序(从 az 开始)对每个单词进行排序.或者,您可能有一个包含用户信息(包括名称)的对象数组,例如,您希望在其中按用户名称对用户进行排序. 我们可以在 Java ...

  2. JavaScript(JS)有一组英文歌曲,按照歌曲名称的字母顺序从“A”到“Z”顺序排列,保存在一个数组中。

    JavaScript有一组英文歌曲,按照歌曲名称的字母顺序从"A"到"Z"顺序排列,保存在一个数组中.网上搜下英文歌,现在增加一首新歌,将他插入数组,并保持原来 ...

  3. php 字母顺序排序,按字母顺序排序数组php

    因为标题建议我想在php中按字母顺序排序数组. $arr = array( 'k' => 'pig', 'e' => 'dog' ) 会成为 $arr = array( 'e' => ...

  4. php 对字母排序,PHP按字母顺序排序

    在MySQL中: SELECT * FROM table ORDER BY name ASC 在PHP中: $fruits = array("lemon", "orang ...

  5. java abc排序_Java实现按照大小写字母顺序排序的方法

    本文实例讲述了Java实现按照大小写字母顺序排序的方法.分享给大家供大家参考,具体如下: 这里排序需要得到的结果按字母顺序.如:a-----z... import java.util.*; /** * ...

  6. 对只含英文字母的字符串按字母顺序排序,相同的字母大写在前,小写在后

    对只含英文字母的字符串按字母顺序排序,相同的字母大写在前,小写在后 如 AxcBsYuC 排序得 ABCcxY 提示:利用map实现自定义的ascii码表.再用冒泡法排序. 在这里插入代码片 publ ...

  7. android 字母排序,android – 按字母顺序排序列表

    我在一个应用程序上工作,我用已安装的应用程序创建一个列表,让用户选择一个.除了一件事,我一切都在工作;按字母顺序排序.这是我正在使用的代码: private List loadInstalledApp ...

  8. html列表按时间排序代码_按字母顺序排序的列表

    有时候你需要自制一份课件PPT或者手写笔记的关键词索引,用来开卷考试查阅PPT或者复习查阅笔记时能快速定位查阅内容位置,这时你可能想要一个按字母顺序排序的列表来帮助构建需要的索引. LaTeX自身的i ...

  9. java丶对数组值按首字母进行排序

    对数组值按首字母进行排序: public class Test {public static void main(String[] args) {List<String> list = A ...

最新文章

  1. C++之virtual 方法
  2. 多个基因集富集结果泡泡图绘制展示
  3. gatsby_与Gatsby一起使用React Context API
  4. 女生做产品经理好吗_谁说女生不适合做产品经理?
  5. listctrl 的使用技巧
  6. python爬虫从入门到放弃-python 爬虫《从入门到放弃》
  7. 190216每日一句
  8. python 数据文件上传到ftp服务器
  9. AMAZEUI之iscroll 下滑刷新/上拉加载更多实例
  10. go语言-channel使用(二十一)
  11. Python-字符串
  12. matlab 差分方程的解(解答qq网友)
  13. java四则运算简单界面版
  14. 量子竞赛下一步:在应用中体现量子优势
  15. 什么是软件测试及其分类?
  16. HTML制作一个介绍自己家乡的网站——贵阳,排版整洁,内容丰富,主题鲜明
  17. (BAT批处理)批量文件夹重命名,要求是在原文件夹名前加上英文字母前缀aa
  18. HDU 4069 Squiggly Sudoku DLX 精确覆盖
  19. 基础理论—需求定律与供给定律分析…
  20. 2020年哨兵数据批量下载(USGS)

热门文章

  1. vivo浏览器的神奇操作
  2. 微信小程序实现搜索关键词高亮
  3. Flink 六脉神剑秘诀
  4. 关于营业厅终端桌面系统智慧平台解决方案
  5. 人气最高的缓存中间件:Redis
  6. 偷偷告诉你......
  7. js动态为html标签增加class属性及样式
  8. 关于《死亡细胞》美术工作流的初步探索
  9. 如何直接在Windows下进行ARM-Linux应用程序开发调试
  10. 力扣404. 左叶子之和