繁体   English   中英

如何在 javascript 中对具有嵌套数组的对象进行排序

[英]how to sort objects having nested array in javascript

我想知道如何在 javascript 中对包含嵌套数组的 object 进行排序。 我有obj ,其中每个属性值(颜色,产品)需要按label排序

var obj = {
 color: [{id:1, label: "white"}, {id:2, label: "black"}, {id:3, label:"purple"}],
 product: [{id: 1, label: "women"},{id: 4, label: "men"}, {id: 3,label:"kids"}]
}

function sortobj(obj){
  var result = obj.forEach(grp => {
    return grp.sort((a, b) => a.label- b.label)
  })
  return result;
}

var result = sortobj(obj);

预计 Output

{
  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"}]
}

首先调用Object.entries()从 object 获取键/值数组,然后使用Array.reduce()String.localeCompare()如下:

 var obj = { color: [{id:1, label: "white"}, {id:2, label: "black"}, {id:3, label:"purple"}], product: [{id: 1, label: "women"},{id: 4, label: "men"}, {id: 3,label:"kids"}] }; function sortObj(obj){ return Object.entries(obj) // [['color', [{...}, {...}, ...]], ['product', [...]]].reduce((acc, [key, value]) => ({...acc, [key]: value.sort((a, b) => a.label.localeCompare(b.label)) }), {}); // or //(acc[key] = value.sort((a, b) => a.label.localeCompare(b.label)), acc), {}); } var result = sortObj(obj); console.log(result); //Expected Output // { // 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"}] // }

您将需要遍历原始 object 的键(属性),获取每个属性的值并按 label 对其进行排序。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM