[英]How to Sort Nested Object By Property With Same String, Move Values in Ascending Order & Create Id in JavaScript
我目前有一個帶有嵌套 object arrays 的 object ,如下所示:
const gyms: any = {
gymOne: [
{ class: "yoga", name: "spin class 0" },
{ class: "spin", name: "spin class 1" },
],
gymTwo: [
{ class: "spin", name: "a spin class 3" },
{ class: "weightlifting", name: "weightlifting class 1" },
],
};
for (let key in gyms) {
if (typeof gyms[key] === "object") {
console.log(gyms[key]);
} else {
console.log("");
}
}
我的目標是創建一個忽略鍵(gymOne,gymTwo)的新結果 object,列出基於相同 class 名稱的所有類(即所有旋轉類應該在一起),並重新排序,以便名稱按字母升序排列命令。
我對 JavaScript 生疏了,但這就是我開始獲取類和名稱的方式
for (let key in gyms) {
if (typeof gyms[key] === "object") {
console.log(gyms[key]);
} else {
console.log("");
}
}
我可能需要創建一個新的 object 就像let resultObj = []
來保存新的排序順序。
我很感激任何建議。 謝謝你。
編輯:這是當前控制台 output。
[LOG]: [{
"class": "yoga",
"name": "spin class 0"
}, {
"class": "spin",
"name": "spin class 1"
}]
[LOG]: [{
"class": "spin",
"name": "a spin class 3"
}, {
"class": "weightlifting",
"name": "weightlifting class 1"
}]
所需樣品 output 示例:
const resultObj = [
{ class: "spin", name: "a spin class 3" },
{ class: "spin", name: "spin class 1" },
{ class: "weightlifting", name: "weightlifting class 1" },
{ class: "yoga", name: "spin class 0" },
]
一個簡單的方法可以是:
或者,您可以同時執行這兩個步驟,但似乎您仍然對 JS 感到滿意,所以我現在不必擔心優化太多。
// first, get an array containing all the object values, this will be an array of arrays
Object.values(gyms)
// flat returns a new array with the sub-array elements concatenated into it
.flat()
// sort the keys, first by `class` and then by `name`
.sort((a, b) => {
return a.class.localeCompare(b.class) || a.name.localeCompare(b.name)
})
您可以從 object 獲得所有值的平面數組,並按class
和name
排序。
const gyms = { gymOne: [{ class: "yoga", name: "spin class 0" }, { class: "spin", name: "spin class 1" }], gymTwo: [{ class: "spin", name: "a spin class 3" }, { class: "weightlifting", name: "weightlifting class 1" }] }, items = Object.values(gyms).flat(); items.sort((a, b) => a.class.localeCompare(b.class) || a.name.localeCompare(b.name) ); console.log(items);
.as-console-wrapper { max-height: 100%;important: top; 0; }
對於更動態的方法,您可以使用鍵數組進行排序。
const gyms = { gymOne: [{ class: "yoga", name: "spin class 0" }, { class: "spin", name: "spin class 1" }], gymTwo: [{ class: "spin", name: "a spin class 3" }, { class: "weightlifting", name: "weightlifting class 1" }] }, items = Object.values(gyms).flat(), keys = ['class', 'name']; items.sort((a, b) => { let r; keys.some(k => r = a[k].localeCompare(b[k])); return r; }); console.log(items);
.as-console-wrapper { max-height: 100%;important: top; 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.