如何在javascript中对具有嵌套数组的对象进行排序
我想知道如何在javascript中对包含嵌套数组的对象进行排序。 我有如何在javascript中对具有嵌套数组的对象进行排序,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,我想知道如何在javascript中对包含嵌套数组的对象进行排序。 我有obj,其中每个属性值(颜色、产品)都需要按标签排序 预期产量 { color: [{id:2, label: "black"}, {id:3, label:"purple"}, {id:1, label: "white"}], product: [{id: 3,label:"kids"}, {id: 4, label: "men"}, {id: 1, label: "women"}] } 您需要迭代原始对象的键(
obj
,其中每个属性值(颜色、产品)都需要按标签排序
预期产量
{
color: [{id:2, label: "black"}, {id:3, label:"purple"}, {id:1, label: "white"}],
product: [{id: 3,label:"kids"}, {id: 4, label: "men"}, {id: 1, label: "women"}]
}
您需要迭代原始对象的键(属性),获取每个属性的值并按标签排序
function sortobj(obj) {
return Object.keys(obj).reduce((sortedObj, key) => {
const value = obj[key];
const sortedValue = value.sort((a, b) => a.label.localeCompare(b.label));
return {
...sortedObj,
[key]: sortedValue
};
}, {});
}
首先调用从对象获取键/值数组,然后按如下方式使用和:
var obj={
颜色:[{id:1,标签:“白色”},{id:2,标签:“黑色”},{id:3,标签:“紫色”},
产品:[{id:1,标签:“女性”},{id:4,标签:“男性”},{id:3,标签:“儿童”}]
};
功能sortObj(obj){
返回Object.entries(obj)/['color',[{…},{…},…]],['product',[…]]
.reduce((acc,[键,值])=>
({…acc[key]:value.sort((a,b)=>a.label.localeCompare(b.label)),{});
//或
//(acc[key]=value.sort((a,b)=>a.label.localeCompare(b.label)),acc),{});
}
var结果=sortObj(obj);
控制台日志(结果);
//预期产量
// {
//颜色:[{id:2,标签:“黑色”},{id:3,标签:“紫色”},{id:1,标签:“白色”},
//产品:[{id:3,标签:“孩子”},{id:4,标签:“男人”},{id:1,标签:“女人”}]
//}
您的对象中没有一个具有.value
属性…这是否回答了您的问题?为什么需要重新创建对象才能对其属性的值进行排序?这取决于上下文,但我们也可以向同一对象添加新属性。我们可以做许多问题没有要求的事情。但这是非常迂回的,即使我们选择扩展对象。没有理由克隆对象或添加任何新属性。同时,原始对象也会对其数组属性进行排序,因此创建克隆似乎是浪费和无用的。因此,创建排序函数并将结果分配给另一个变量甚至是无用的,我们可以只使用原始对象,但这正是OP要求的(如果您查看提供的代码)我画的解决方案中有什么不起作用的吗?
function sortobj(obj) {
return Object.keys(obj).reduce((sortedObj, key) => {
const value = obj[key];
const sortedValue = value.sort((a, b) => a.label.localeCompare(b.label));
return {
...sortedObj,
[key]: sortedValue
};
}, {});
}