Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Sorting_Object - Fatal编程技术网

如何在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"}] } 您需要迭代原始对象的键(

我想知道如何在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"}]
}

您需要迭代原始对象的键(属性),获取每个属性的值并按标签排序

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
    };
  }, {});
}