码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript对象根据Key值排序

时间:2015-11-24 00:58:01      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:

近日在工作中遇到了一个挺有意思的问题。对JS的对象按Key值排序。如下面的obj对象

var obj ={
"中国(100)":"‘beijing‘,‘sichuan‘ ,‘jilin‘",
"英国大不列颠(2)" :"‘london‘,‘airland‘",
"美国加州(5)":"‘phonix‘,‘atalata‘",
"德意志(4)":"‘berlin‘,‘etc‘"
}

最初遇到这个问题,我是想通过一个遍历拿到所有的Key值,push到一个数组,然后对数组进行一个arr.sort()排序。

但是我不能直接对 ’中国100‘,’德意志4‘,排序因为ASCII码还是什么的应该是不支持中文的,(具体是什么原因,以后再深究)。

所以我需要拿到中文结束后的数值,然后对数值进行排序。

这里我就掉进了一个坑。我单独取出了中文和数字,然后我想对数字排序后再重新拼接回去,最后再通过排好序的key遍历得到对应的值,然后属性应该就算排序好了~

聪明的你估计已经想到了这个坑是什么,就是我这样做压根对这个问题没有任何帮助。

如果我有多个key值的后边跟的数值是一样的(如’意大利1‘,’西班牙1‘)我把这个数值取出来有什么意义呢?

难道我还能通过这个数值去找到前边的中文字符?亦或者  总之,这应该是我某些方面的问题...

随后,我想到了改写js定义好的sort()方法:

我们知道使用sort()方法,最简便的格式返回一个升序或者降序序列(根据数值大小)是这样:

    sort(function(a,b){return a-b/b-a})//a-b为升序,b-a为降序。

但是此时我又在纠结这个中文字符的问题。。

可能基础知识不扎实,或者说经验不够。我没有想到说使用substring取出数值,对数值排序。

像这样:          //var reg = /[\u4e00-\u9fa5]*/;

    sort(function(a,b){

    a = a.substring(a.indexOf("("),a.indexOf(")"));b=...   return b-a;

  })

这样sort()出来的数组应该就是arr=[‘英国大不列颠2‘,‘德意志4‘,‘美国加州5‘,‘中国100‘];

然后通过嵌套的for循环,

  for(var i=0;i<arr.length;i++){

  for( i in obj){

  if(arr[i]==i)  arr2.push(‘...‘)

}

}

就能迭代输出有序的对象属性。

(我们知道遍历对象中的属性,通常我们会使用for in来循环遍历属性,然后就可以拿到每一对应的值。但是for in的结果本身是无序的)--

这期间取出key值中的中文字符,还去看了一些正则表达式的东西。以前有接触过正则,但是可能我连text,match,replace这些有什么区别都不是很清楚。

而且我不知道这些方法放回的值(数组)都是什么含义。 例如 str.match(reg)[0]  这样才能拿到你想要的文本,因为match方法返回的是一个数组,

数组的第一个原始是匹配到的文本。(1)

这个问题本身还是很简单的,但是为什么我还是折腾了很久才出来~~~:

1.思考问题的深度和方式有待加强 2.基础知识的掌握程度不够 3.智商不够。还不勤奋一点。

最后:复杂的问题都是由一个个简单的问题组成的。我们缺少的是量的积累,不要总想着质的改变。

JavaScript对象根据Key值排序

标签:

原文地址:http://www.cnblogs.com/dengqc/p/4990190.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!