Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按键值对对象排序_Javascript_Sorting_Object - Fatal编程技术网

Javascript 按键值对对象排序

Javascript 按键值对对象排序,javascript,sorting,object,Javascript,Sorting,Object,我被一个对象结构卡住了(现在),我想看看是否可以尝试排序。我的目标现在看起来像这样- { "type1" : { "position": 3 }, "type2" : { "position": 1 } } 我想弄清楚的是,除了嵌套位置之外,是否有办法对对象键/值重新排序(排序)。因此,理想的结果是 { "type2" : { "position": 1 }, "type1" : { "position": 3 } }

我被一个对象结构卡住了(现在),我想看看是否可以尝试排序。我的目标现在看起来像这样-

{
  "type1" : { 
    "position": 3
  },
  "type2" : { 
     "position": 1
  }
}
我想弄清楚的是,除了嵌套位置之外,是否有办法对对象键/值重新排序(排序)。因此,理想的结果是

{
  "type2" : { 
     "position": 1
  },
  "type1" : { 
    "position": 3
  }
}
因此,决定顺序的是对象中的
位置
值。我正在重构另一个项目,尝试在列表中添加一些排序。我知道如果它是一个对象列表会容易得多,但这需要我修改很多其他代码,所以我试图找出是否可以保持对象结构不变(当然,如果可能的话)。谢谢你的阅读

var a={
“类型1”:{
“职位”:3
},
“类型2”:{
“职位”:1
}
};
var b=Object.assign(
对象
.钥匙(a)
.sort((x,y)=>a[x]。位置>=a[y]。位置)
.map(k=>({[k]:a[k]}))
);

console.log(b)。您看到的任何顺序都是纯实现定义的。对象属性根据定义是无序的,所以这是不可能的。如果订单很重要,你需要把它做成一个数组。谢谢你的回答。我将关闭它,因为它是一个副本。但是,您可以做的是:
Object.keys(myObj).sort((a,b)=>myObj[a].position-myObj[b].position)
,以获得按首选顺序排列的键数组。这不起作用,因为它仍然依赖于实现定义的键顺序。例如,Chrome最近改变了自己的实现,打破了一些网络应用程序的预期顺序。你能澄清你的评论吗?在我的回答中,对象
a
b
的顺序不同。而且,对于它是否是一个新的对象或对现有对象的重新排序,也没有做出任何澄清。而且没有浏览器,也没有指定有问题的ES版本。那么你为什么要说,这个答案并没有涵盖所有案例,而没有指定案例?返回的顺序是实现定义的。您希望它保持插入顺序,但这在ECMAScript中无法保证,而且至少在Chrome和Edge中并不总是如此。例如,当我在Edge中运行您的代码片段时,我看到
type1
后面跟着
type2
。那么,当我在ie6上运行它时,它会抛出一个错误,然后呢?ECMAScript中记录了此选项,浏览器支持是另一个大问题。没有具体说明的大问题。谁知道Ajma可能想在typescript或babel中使用它。是的,我99%肯定它会