JavaScript对象根据Key值排序

近日在工作中遇到了一个挺有意思的问题。对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.智商不够。还不勤奋一点。

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

时间: 2024-10-19 18:40:25

JavaScript对象根据Key值排序的相关文章

python练习:字典value值排序,key值排序

#字典value值排序,key值排序 from random import * dict1 = {x:randint(5,12) for x in "aijwt"} dict2 = {randint(5,12):y for y in "aibjwte"} print ('dict1:',dict1) print ('dict2:',dict2) print ("将字典按value倒序显示,办法(collections的Counter):") fr

js修改对象的key值

var array = [ { id:1, name:"小明" }, { id:2, name:"小红" } ]; /**/ //旧key到新key的映射 var keyMap = { "id" : "value", "name" : "label" }; for(var i = 0;i < array.length;i++){ var obj = array[i]; for(va

字典按key值排序

data_dic = {'20190105': [{'name':'bbb','value': '222'}, {'name':'aaa', 'value': '111'}], '20190101': [{'name':'bbb','value': '333'}, {'name':'aaa', 'value': '555'}]} # 列表按 name值字段排序 for key, value in data_dic.items(): value_temp = sorted(value, key=l

js获取json对象的key值

 <script type="text/javascript">  getJson('age'); function getJson(key){ var jsonObj={"name":"傅红雪","age":"24","profession":"刺客"}; //1.使用eval方法 var eValue=eval('jsonObj.'+key); ale

js json按key值排序

jsonSort:function (jsonObj) { let arr=[]; for(var key in jsonObj){ arr.push(key) } arr.sort(); let str=''; for(var i in arr){ str +=arr[i]+"="+jsonObj[arr[i]]+"&" } return str.substr(0,str.length-1) } 原文地址:https://www.cnblogs.com/w

STL map 按key值和按value值排序

map是用来存放<key, value>键值对的数据结构,能够非常方便高速的依据key查到对应的value. 假如存储水果和其单位价格.我们用map来进行存储就是个不错的选择. 我们这样定义.map<string, double>.当中水果用string类型.作为Key:该水果的单位价格用double类型,作为value. 这样一来,我们能够依据水果名高速的查找到价格. 我们不仅要将水果和相应的价格输出,还想知道依照价格高低进行排序的结果. 换句话说,我们希望可以对map进行按Ke

搜狗面试的经典题(map按值排序)

一:起因 (1)java  Map排序(key,value),请看另一篇博客 java Map排序 (2)c++ map排序(key,value),可以对c++ map和java Map进行对比:之一,c++的map默认按照key值进行排序,而且就是map了:java Map HashMap是随 机的,不进行排序的.之二,c++声明对象直接Map map(^)的,不用= new的 (3)c++ 按value值排序,map是不能直接排序的,它虽然也是一个数据集合,第一反应是利用stl中提供的sor

列表中嵌套字典,根据字典的值排序

格式:数据类型为列表,列表元素为字典.由字典组织的列表形式. 分析:可以将列表中的字典先放入到一个大字典中,对整个字典进行排序,在排序完成后,再转换为列表包含字典的形式即可 现在有一个列表,根据每个字典的值进行排序. dict_list = [{"ming": 87}, {"mei": 93}, {"hua": 68}, {"jon": 75}, {"ston": 100}, {"jack&quo

根据map中的某一key进行排序(快速排序实现)

/** * @author Gaoxl * 根据key值排序,要求key值能够转为Long类型(快速排序) * @param maps * @param key * @return */ public static void sort(Map<String,Object>[] maps,String key,int start,int end){ if(start < end){ int mid = divide(maps,key,start,end); sort(maps,key,st