【转】js 对象按照键值(不分区大小写)排序,生成签名方法

客户需求小程序端用js生成签名,我们按照要求一步一步解决,并且将请求方法封装到一个utils.js里:

第一步:对关联数组按照键名做正序排序。

第二步:拼接字符串

第三步:将拼接的字符串加上私钥

第四步:将以上字符串MD5加密

const md5 = require(‘md5.js‘);
var appsecret ="appsecret ";
var App_Key ="App_Key ";

//字母排序:不区分大小写
function sortCharter(a, b) {
if (a.toString().toUpperCase() > b.toString().toUpperCase()) {
return 1;
}
else if (a.toString().toUpperCase() == b.toString().toUpperCase()) {
return 0;
}
else {
return -1;
}
}

function objKeySort(obj) {//排序的函数
var newkey = Object.keys(obj).sort(sortCharter);
//先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
var newObj = {};//创建一个新的对象,用于存放排好序的键值对
for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
}
return newObj;//返回排好序的新对象
}
String.prototype.PadLeft = function (len, charStr) {
var s = this + ‘‘;
return new Array(len - s.length + 1).join(charStr, ‘‘) + s;
}

//创建sign
function create_sign(data) {

console.log("1、排序前create_sign0");
console.log(data);
//1、排序
data = objKeySort(data);
console.log("1、排序后create_sign111");
console.log(data);
//2.拼接
var txt="";
var newkey = Object.keys(data);
for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
txt = txt + newkey[i].length.toString().PadLeft(2, ‘0‘);
txt=txt+"-";
txt = txt + newkey[i];
txt = txt + ":";
//  console.log("for内部===k-v");
console.log(newkey[i]);
console.log(data[newkey[i]]);
txt = txt + data[newkey[i]].toString().length.toString().PadLeft(4,‘0‘);
txt = txt + "-";
txt = txt + data[newkey[i]];
if (i < (newkey.length-1))
{
txt = txt + ";";
}
}
//console.log("for内部===3.追加私钥appsecret");
//3.追加私钥appsecret
// console.log(txt);
// console.log("appsecret=" + appsecret);
txt = txt + appsecret;
//4.md5加密
txt = md5.hex_md5(txt);
return txt;
}

原文地址:https://www.cnblogs.com/yunspider/p/9537807.html

时间: 2024-10-12 15:54:56

【转】js 对象按照键值(不分区大小写)排序,生成签名方法的相关文章

js对象替换键值名称

js对象替换键值名称 将obj中的id和name字段替换分别替换成为"@id","@name" 代码如下: let obj = [{id:1,name:"张三"},{id:2,name:"李四"}].map(function (item) { return{ "@id":item.id, "@name":item.name } }) 对于对象 let obj = { id:1, name

JS判断两个对象是否键值对应相等

//isEqual:判断两个对象是否键值对应相等 function isEqual(a,b){ //如果a和b本来就全等 if(a===b){ //判断是否为0和-0 return a !== 0 || 1/a ===1/b; } //判断是否为null和undefined if(a==null||b==null){ return a===b; } //接下来判断a和b的数据类型 var classNameA=toString.call(a), classNameB=toString.call(

有点意思之你真的了解对象的键值

javaScript中的对象本质上就是哈希表,即键值对的集合,但是需要注意的是,在这些键值中,键总是字符串. 1 var foo = new Object; 2 var bar = new Object; 3 var map =new Object; 4 map[foo] = 'foo'; 5 map[bar] = 'bar'; 6 alert(map[foo]); 在上列所示的代码中,由于foo和bar是对象,在作为map对象的键时,会调用自身的toString()方法把自己转换为对象,那么等

排序数组以及遍历普通对象的键值对以及如何遍历一个不同键值的对象数组

var array = [12,3,67,88,9,344,78,6]; var obj1 = {'name':'小林','age':'18','sex':'男'}; var obj2 = [{'name':'小明'},{'age':'33'},{'sex':'男'},{'sport':'篮球'}]; var keys = [],values = [];//遍历obj1用来存储 键和值的 var keys2 = [],values2 = [];//遍历obj2用来存储 键和值的 array.so

C# 枚举转键值对,获取描述等通用方法

/// <summary> /// 扩展方法,获得枚举的Description /// </summary> /// <param name="value">枚举值</param> /// <param name="nameInstead">当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用</param> /// <returns>枚举的Des

字典转模型的时候,如果字典键值对比模型属性多,解决方法

+ (instancetype)newWithDictionary:(NSDictionary *)dict { news *newOne = [self new]; [newOne setValuesForKeysWithDictionary:dict]; return newOne; } 如果使用KVC需要字典键值对和模型属性一一对应,但是重写下面方法,就可以解决这个问题 方法内部不需要写任何东西 - (void)setValue:(id)value forUndefinedKey:(NSS

浅谈js对象之数据属性、访问器属性、Object.defineProperty方法

一.对象 这个不用多说,常见的几种创建对象的方法有: 1.通过构造函数创建对象,如下所示: function Person(){ } var person = new Person(); 2.通过Object创建简单对象,例如: var obj = new Object(); 3.通过字面量创建对象. var obj = {}; 常用的一般是第一种和第三种方法. 二.属性类型 javascript中有两种属性:数据属性和访问器属性,确切的说这两种特性是用来描述对象属性的各种特征,比如说这个对象属

js实现的对象数组根据对象的键值进行排序代码

有时候会遇到做展示数组的排序,由大到小和由小到大的切换: var arr=[{id:1,webName:"蚂蚁部落"},{id:2,webName:"网易"}]; function done(key,desc) {   return function(a,b){     //return desc ? ~~(parseInt(a[key]) < parseInt(b[key])) : ~~(parseInt(a[key]) > parseInt(b[ke

js获取键盘键值

1.获取键盘的码值 function onkeydown_at_phone(event) { alert(event.keyCode);   } 2.对按钮进行监听 function onkeydown_at_phone(event) {   var prev = document.getElementById("prev");   var next = document.getElementById("next");   if(event.keyCode == 3