簡體   English   中英

如何按具有相同字符串的屬性對嵌套的 Object 進行排序,按升序移動值並在 JavaScript 中創建 ID

[英]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" },  
]

一個簡單的方法可以是:

  1. 將所有項目組合在一個數組中
  2. 對數組進行排序

或者,您可以同時執行這兩個步驟,但似乎您仍然對 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 獲得所有值的平面數組,並按classname排序。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM