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