Javascript 按对象属性排序,然后将特定对象附加到嵌套数组对象内的数组末尾

Javascript 按对象属性排序,然后将特定对象附加到嵌套数组对象内的数组末尾,javascript,arrays,object,Javascript,Arrays,Object,我有以下对象和嵌套的对象数组 我试图编写一个简单的Javascript函数,按照“label”属性的字母顺序对这些数组中的对象进行排序,然后将带有“other”标签的对象推送到该数组的末尾 这是我目前的解决方案,但我想知道是否有一种更干净、更具声明性的方法来处理这个解决方案 它可以优化如下: 首先删除“Undefined”值,这样不会减慢排序速度 在排序过程中,强制将“其他”定义为较大的项,以将其移动到数组的末尾 const things={ “动物”:[{ “id”:0, “标签”:“猫”

我有以下对象和嵌套的对象数组

我试图编写一个简单的Javascript函数,按照“label”属性的字母顺序对这些数组中的对象进行排序,然后将带有“other”标签的对象推送到该数组的末尾

这是我目前的解决方案,但我想知道是否有一种更干净、更具声明性的方法来处理这个解决方案


它可以优化如下:

  • 首先删除“Undefined”值,这样不会减慢排序速度
  • 在排序过程中,强制将“其他”定义为较大的项,以将其移动到数组的末尾
  • const things={
    “动物”:[{
    “id”:0,
    “标签”:“猫”
    },
    {
    “id”:100,
    “标签”:“未定义”
    },
    {
    “id”:200,
    “标签”:“海龟”
    },
    {
    “id”:300,
    “标签”:“其他”
    },
    ],
    “颜色”:[{
    “id”:0,
    “标签”:“黄色”
    },
    {
    “id”:100,
    “标签”:“绿色”
    },
    {
    “id”:200,
    “标签”:“红色”
    },
    {
    “id”:300,
    “标签”:“蓝色”
    }
    ]
    };
    const sortedThings=Object.entries(things).reduce((obj,[key,value])=>
    (obj[键]=值
    .filter(项=>item.label!=“未定义”)
    .排序((a,b)=>(
    a=a.label.toLowerCase(),
    b=b.label.toLowerCase(),
    a==b?0:b!=“其他”&&(a==“其他”| a>b)?1:-1
    )), 
    obj
    ), 
    {});
    
    控制台日志(分类内容)
    请使用
    对象.entries()发布您的代码。
    迭代即使它不起作用,我们也无法帮助您修复它。@Bergi--我已经用我当前的解决方案更新了“我很难用这些串键返回新对象”-您似乎缺少的只是
    sortedThings[key]=VAL在迭代结束时。
    
    let things = {
      "animals": [{
          "id": 0,
          "label": "cat"
        },
        {
          "id": 100,
          "label": "Undefined"
        },
        {
          "id": 200,
          "label": "turtle"
        },
        {
          "id": 300,
          "label": "Other"
        },
      ],
      "colors": [{
          "id": 0,
          "label": "yellow"
        },
        {
          "id": 100,
          "label": "green"
        },
        {
          "id": 200,
          "label": "red"
        },
        {
          "id": 300,
          "label": "blue"
        }
      ]
    }
    
    let sortedThings = {};
    Object.entries(things).forEach((entry) => {
      let key = entry[0];
      let otherOption = entry[1].filter((o)=> o.label === "Other");
      console.log(otherOption)
      let vals = entry[1].sort((a, b) => (a.label > b.label) ? 1 : ((b.label > a.label) ? -1 : 0)).filter((s) => s.label !== "Undefined")
      if(otherOption.length){
         vals = vals.filter((s) => s.label !== "Other");
         vals = vals.concat(otherOption);
      }
    })