Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Lodash - Fatal编程技术网

Javascript 如何根据对象属性对数组中的对象键进行排序?

Javascript 如何根据对象属性对数组中的对象键进行排序?,javascript,sorting,lodash,Javascript,Sorting,Lodash,我有一个具有以下结构的对象: root_object: { ITEM_ONE: { order: 2, prop_one: '123', prop_two: '456', }, ITEM_TWO: { order: 1, prop_one: '789', prop_two: '321', }, ITEM_THREE: { order: 3,

我有一个具有以下结构的对象:

root_object: {
    ITEM_ONE: {
        order: 2,
        prop_one: '123',
        prop_two: '456',
    },
    ITEM_TWO: {
        order: 1,
        prop_one: '789',
        prop_two: '321',
    },
    ITEM_THREE: {
        order: 3,
        prop_one: '654',
        prop_two: '987',
    },
}
最终,我需要获得密钥列表:

['ITEM_ONE', 'ITEM_TWO', 'ITEM_THREE']
但它们需要根据属性顺序进行排序,这将导致:

['ITEM_TWO', 'ITEM_ONE', 'ITEM_THREE']

为此,我更喜欢使用_lodash库,但我甚至不知道如何开始使用它,因为根对象的结构是一个对象而不是列表。

您可以通过获取排序值对键进行排序

var object={root_object:{ITEM_ONE:{order:2,prop_ONE:'123',prop_ONE:'456'},ITEM_two:{order:1,prop_ONE:'789',prop_two:'321'},ITEM_ONE:{order:3,prop_ONE:'654',prop two:'987'}, keys=Object.keysobject.root\u对象; keys.sorta,b=>object.root\u对象[a]。order-object.root\u对象[b]。order; 控制台日志键;
.作为控制台包装{max height:100%!important;top:0;}您可以使用普通js使用sort方法和Object.keys执行此操作

常量数据={项目一:{顺序:2,项目一:123,项目二:456},项目二:{顺序:1,项目一:789,项目二:321},项目三:{顺序:3,项目一:654,项目二:987} const res=Object.keysdata.sorta,b=>data[a]。order-data[b]。order console.logres只需与回调函数一起使用,如下所示:

变量根={项目一:{顺序:2,项目一:'123',项目二:'456'},项目二:{顺序:1,项目一:'789',项目二:'321'},项目三:{顺序:3,项目一:'654',项目二:'987'}; var keys=Object.keysroot.sorta,b=>root[a]。order-root[b]。order; 控制台。日志…键 只需在Object.keysroot\u对象的数组上使用Array.prototype.sort即可:

常量根对象={ 第一项:{ 订单:2, 第一号提案:“123”, 第二项提案:“456”, }, 项目二:{ 订单:1, 第一号提案:“789”, 第二项提案:“321”, }, 项目三:{ 订单:3, 第一号提案:“654”, 第二号提案:“987”, }, } 让result=Object.keysroot\u Object.sorta,b=>root\u Object[a]。order-root\u Object[b]。order; console.logresult 可以将Object.key与Array.map和Array.sort一起使用 常量根对象={ 第一项:{ 订单:2, 第一号提案:“123”, 第二项提案:“456”, }, 项目二:{ 订单:1, 第一号提案:“789”, 第二项提案:“321”, }, 项目三:{ 订单:3, 第一号提案:“654”, 第二号提案:“987”, }, } 设rootArr=[]; 让sortedRootObject=Object.keysroot\u Object.mapkey=>rootArr.pushroot\u Object[key]。sorta,b=>rootArr[b.order]-rootArr[a.order]
console.logsortedRootObject这是一个On解决方案sort is Onlogn,仅适用于唯一的订单值

可以使用lodash将每个属性的值映射到{ITEM_ONE:2,ITEM_TWO:1,…}顺序,然后反转键和值{1:ITEM_TWO,2:ITEM_ONE,…},并提取值。这将为您获取以下列表中的项目:

常量{flow,particle:pr,mapValues,invert,values}=_ 常数fn=流量 prmapValues,'顺序',//转换为{ITEM_ONE:2,ITEM_TWO:1,…} 反转,//转换为{1:ITEM_-TWO,2:ITEM_-ONE,…} 值//获取键数组 const root_object={ITEM_ONE:{order:2,prop_ONE:123,prop_two:456},ITEM_two:{order:1,prop_ONE:789,prop_two:321},ITEM_THREE:{order:3,prop_ONE:654,prop_two:987} const result=fnroot\u对象 console.logresult
你试了什么?给我们看一些给你错误的代码?还是你尝试的解决方案?我们不是来做你的工作的。倒过来是一种聪明的排序方式,尽管我认为如果订单值可以重复是不安全的。@p.s.w.g-的确如此。关于这一点,我要补充一点。