如何按具有相同字符串的属性对嵌套对象进行排序、按升序移动值&;在JavaScript中创建Id

如何按具有相同字符串的属性对嵌套对象进行排序、按升序移动值&;在JavaScript中创建Id,javascript,object,nested,Javascript,Object,Nested,我当前有一个具有嵌套对象数组的对象,如下所示: const gyms: any = { gymOne: [ { class: "yoga", name: "spin class 0" }, { class: "spin", name: "spin class 1" }, ], gymTwo: [ { class: "spin", name: "a sp

我当前有一个具有嵌套对象数组的对象,如下所示:

const gyms: any = {
  gymOne: [
    { class: "yoga", name: "spin class 0" },
    { class: "spin", name: "spin class 1" },
  ],
  gymTwo: [
    { class: "spin", name: "a spin class 3" },
    { class: "weightlifting", name: "weightlifting class 1" },
  ],
};

for (let key in gyms) {
        if (typeof gyms[key] === "object") {
            console.log(gyms[key]);   
        } else {
            console.log("");    
        }
}
我的目标是创建一个新的结果对象,该对象忽略键(gymOne、gymtoo),基于相同的类名列出所有类(即所有自旋类都应该在一起),并对其重新排序,以便名称按字母升序排列

我对JavaScript很生疏,但这就是我开始获取类和名称的方式

for (let key in gyms) {
        if (typeof gyms[key] === "object") {
            console.log(gyms[key]);   
        } else {
            console.log("");    
        }
}
我可能需要创建一个新对象,如
let resultObj=[]
,以保存新的排序顺序

我很感激你的建议。多谢各位

编辑:这是当前控制台输出

[LOG]: [{
  "class": "yoga",
  "name": "spin class 0"
}, {
  "class": "spin",
  "name": "spin class 1"
}] 
[LOG]: [{
  "class": "spin",
  "name": "a spin class 3"
}, {
  "class": "weightlifting",
  "name": "weightlifting class 1"
}]
所需的示例输出示例:

const resultObj = [
    { class: "spin", name: "a spin class 3" },
    { class: "spin", name: "spin class 1" },
    { class: "weightlifting", name: "weightlifting class 1" },
    { class: "yoga", name: "spin class 0" },  
]

一个简单的方法是:

  • 将所有项合并到一个数组中
  • 对数组进行排序
  • 或者,您可以同时执行这两个步骤,但您似乎仍然对JS感到满意,所以我现在不必担心优化太多

    //首先,获取一个包含所有对象值的数组,这将是一个数组数组
    对象值(gyms)
    //flat返回一个新数组,其中子数组元素连接到该数组中
    .flat()
    //先按'class'排序,然后按'name'排序`
    .排序((a,b)=>{
    返回a.class.localeCompare(b.class)| | a.name.localeCompare(b.name)
    })
    
    一个简单的方法是:

  • 将所有项合并到一个数组中
  • 对数组进行排序
  • 或者,您可以同时执行这两个步骤,但您似乎仍然对JS感到满意,所以我现在不必担心优化太多

    //首先,获取一个包含所有对象值的数组,这将是一个数组数组
    对象值(gyms)
    //flat返回一个新数组,其中子数组元素连接到该数组中
    .flat()
    //先按'class'排序,然后按'name'排序`
    .排序((a,b)=>{
    返回a.class.localeCompare(b.class)| | a.name.localeCompare(b.name)
    })
    
    您可以从对象中获取所有值的平面数组,并按
    名称
    进行排序

    const
    健身房={gymOne:[{class:“瑜伽”,name:“旋转类0”},{class:“旋转类1”},{class:“旋转类3”},{class:“旋转类3”},{class:“举重”,name:“举重类1”},
    items=Object.values(gyms.flat();
    项目排序((a,b)=>
    a、 class.localeCompare(b.class)||
    a、 name.localeCompare(b.name)
    );
    控制台日志(项目)
    
    .as console wrapper{max height:100%!important;top:0;}
    您可以从对象中获取所有值的平面数组,并按
    类和
    名称进行排序

    const
    健身房={gymOne:[{class:“瑜伽”,name:“旋转类0”},{class:“旋转类1”},{class:“旋转类3”},{class:“旋转类3”},{class:“举重”,name:“举重类1”},
    items=Object.values(gyms.flat();
    项目排序((a,b)=>
    a、 class.localeCompare(b.class)||
    a、 name.localeCompare(b.name)
    );
    控制台日志(项目)
    
    .as console wrapper{max height:100%!important;top:0;}
    很好,我继续编辑。你有上面的结果吗?我用当前控制台输出更新了帖子以供参考。Object.values(gyms)、flatMap(e=>e.filter(e=>e.class==“spin”)
    怎么样?我不确定你的预期输出是什么。请添加想要的结果。很好,我继续编辑了。你有上面的结果吗?我用当前控制台输出更新了帖子以供参考。关于
    Object.values(gyms).flatMap(e=>e.filter(e=>e.class==“spin”)
    ?我不确定您的预期输出是什么。请添加想要的结果。这也有效-谢谢!这同样有效-谢谢!