[英]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.