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