IE数组排序问题的处理

有一哥们在微信开发中,到生成签名这抓狂了一天

 

最后发现微信调试工具在IE和chrome下对字符的排序竟然不同。

 

嗯,这个问题引起了我的关注,于是根据微信工具里的对象数组格式,撸了几句代码调试了一下,发现在IE9下,sort遇到复杂对象压根就不工作。

先来简单的:

     var k = ["a","A","123"];
     k.sort();
     console.log(k);

结果:123,A,a

元素是对象的:

var t = [];
var tmp = new Object();
tmp.id = "batch_add_api_ticket";
tmp.val = "A"
t.push(tmp);
tmp = new Object();
tmp.id = "timestamp";
tmp.val = "b"
t.push(tmp);
tmp = new Object();
tmp.id = "nonce_str1";
tmp.val = "12"
t.push(tmp);
tmp = new Object();
tmp.id = "card_id";
tmp.val = "d213"
t.push(tmp);

	t.sort(function(e,t){
		var bln = e.val>=t.val;
		console.log(e.val + ">=" + t.val + " is " + bln);
		return bln;
	});
	 var c="";
     for(i in t)c+=t[i].val;
     console.log(c);

IE9结果:Ab12d123

chrome结果:12Abd123

 

IE又增加了一个槽点,或许是有什么我等菜鸟不懂的玄鸡??

各种搜索无果,于是自己给Array增加一个冒泡排序(字典序)功能

 

Array.prototype.sort2 = function(fn){ 
	var fn = fn || function(a, b){ return a > b;}; 
	for(var i=0; i<this.length; i++){ 
		for(var j=i; j<this.length; j++){ 
			if(fn(this[i], this[j]) > 0){ 
				var t = this[i]; 
				this[i] = this[j]; 
				this[j] = t; 
			} 
		} 
	} 
	return this; 
}; 

经测IE和Chrome结果一致,打完收工碎觉。

 

等等,怎么有个undefined。。

仔细看看,原来拼接字符串时用了for in循环,for..in循环计数器是字符串,而不是for循环中的数字,它会把prototype中的方法或属性给遍历出来(好强大),于是,我们还要判断一下

	 for(var i in t){
	 	if(t.hasOwnProperty(i)){
	 		c+=t[i].val;
	 	}
	 }

嗯,输出终于正常了。碎觉碎觉。

转载于:https://www.cnblogs.com/blackice/p/5031539.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值