簡體   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