簡體   English   中英

根據 javascript 中嵌套的 object 值對數組進行排序

[英]Sorting array based on nested object value in javascript

我正在嘗試根據嵌套的 object 值對數組進行排序/排列。

當前數組:

const comments = [{
        "id": 1745,
        "bannerId": 35002,
        "content": "lorem ipsum",
        "user": "John Doe",
        "banner": {
          "format": "300x250",
          "lang": "EN"
        }
      },
      {
        "id": 1747,
        "bannerId": 35002,
        "content": "test 2222",
        "user": "John Doe",
        "banner": {
          "format": "300x250",
          "lang": "EN"
        }
      },
      {
        "id": 1750,
        "bannerId": 35002,
        "content": "test 3333",
        "user": "Frank Doe",
        "banner": {
          "format": "300x250",
          "lang": "EN"
        }
      },
      {
        "id": 1744,
        "bannerId": 35004,
        "content": "bla bla",
        "user": "John Doe",
        "banner": {
          "format": "300x600",
          "lang": "EN"
        }
      },
      {
        "id": 1746,
        "bannerId": 35006,
        "content": "tesssttt",
        "user": "Frank Doe",
        "banner": {
          "format": "970x250",
          "lang": "NL"
        }
      }];

我在谷歌上搜索了許多文檔以對嵌套的 object 進行排序,但是我找不到我的案例的方式,而且我掙扎了這么多小時,所以我想問一下如何對上面的對象數組進行排序。

所需的 output (或類似的東西):

const comments = [{
        "EN" : [{
          "300x250" : [{
            "John Doe" : [
              {"id": 1745, "bannerId": 35002, "comment": "lorem ipsum"},
              {"id": 1747, "bannerId": 35002, "comment": "test 2222"}
            ]
          },{
            "Frank Doe" : [
              {"id": 1750, "bannerId": 35002, "comment": "test 3333"}
            ]
          }]
        },{
          "300x600" : [{
            "John Doe" : [
              {"id": 1744, "bannerId": 35004, "comment": "bla bla"}
            ]
          }]
        }]
        },{
        "NL" : [{
          "970x250" : [{
            "Frank Doe" : [
              {"id": 1746, "bannerId": 35006, "comment": "tesssttt"}
            ]
          }]
        }]
      }];

我已經嘗試過但沒有成功:

let list = [];

      for (let i = 0; i < comments.length; i++) {

        list[comments[i].banner.lang] = [{
          [comments[i].banner.format] : [{
            [comments[i].user] : [{
              'id': comments[i].id, 'bannerId': comments[i].bannerId, 'comments' : comments[i].content
            }]
          }]
        }];

      }

“=”覆蓋以前的數據..
有些事情我搞砸了,但我想不通:s

希望這里有人可以幫助我:)

您可以找到分組 arrays 的嵌套項。

這種方法采用一系列函數來獲取所需級別的正確鍵值。

 const data = [{ id: 1745, bannerId: 35002, content: "lorem ipsum", user: "John Doe", banner: { format: "300x250", lang: "EN" } }, { id: 1747, bannerId: 35002, content: "test 2222", user: "John Doe", banner: { format: "300x250", lang: "EN" } }, { id: 1750, bannerId: 35002, content: "test 3333", user: "Frank Doe", banner: { format: "300x250", lang: "EN" } }, { id: 1744, bannerId: 35004, content: "bla bla", user: "John Doe", banner: { format: "300x600", lang: "EN" } }, { id: 1746, bannerId: 35006, content: "tesssttt", user: "Frank Doe", banner: { format: "970x250", lang: "NL" } }], groups = [o => o.banner.lang, o => o.banner.format, o => o.user], result = data.reduce((r, o) => { groups.reduce((level, fn) => { let key = fn(o), p = level.find(q => key in q); if (.p) level:push(p = { [key]; [] }); return p[key], }. r):push({ id. o,id: bannerId. o,bannerId: comment. o;content }); return r, }; []). console;log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

let list = [];

for (let i = 0; i < comments.length; i++) {
    if (!list[comments[i].banner.lang]) {
        list[comments[i].banner.lang] = [];
    }

    if (!list[comments[i].banner.lang][comments[i].banner.format]) {
        list[comments[i].banner.lang][comments[i].banner.format] = [];
    }

    if (!list[comments[i].banner.lang][comments[i].banner.format][comments[i].user]) {
        list[comments[i].banner.lang][comments[i].banner.format][comments[i].user] = [];
    }

    list[comments[i].banner.lang][comments[i].banner.format][comments[i].user].push({
          'id': comments[i].id, 
          'bannerId': comments[i].bannerId, 
          'comment' : comments[i].content
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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