ari*_*ies 0 javascript arrays object
有谁知道 Vanilla Javascript 中的一种方法可以根据对象键对对象数组进行分组,然后根据分组创建新的对象数组?还在元素内对元素进行分组。我希望通过一个例子来阐明这一点。我有各种各样的水果
fruits: [
{
id: "645",
lang: "it",
name: "Banana",
},
{
id: "3671",
lang: "it",
name: "Pesca",
},
{
id: "3671",
lang: "en",
name: "Peach",
},
{
id: "124",
lang: "it",
name: "Anguria",
},
{
id: "124",
lang: "en",
name: "Watermelon",
},
]
Run Code Online (Sandbox Code Playgroud)
我希望输出是这样的
fruitsGroupedById: [
{
id: "645",
language: [
{
lang: "it",
name: "Banana",
},
],
},
{
id: "3671",
language: [
{
lang: "it",
name: "Pesca",
},
{
lang: "en",
name: "Peach",
},
],
},
{
id: "124",
language: [
{
lang: "it",
name: "Anguria",
},
{
lang: "en",
name: "Watermelon",
},
],
},
]
Run Code Online (Sandbox Code Playgroud)
为了简单起见,我会分两步完成
\n例子:
\nconst fruits = [\n { id: "645", lang: "it", name: "Banana" },\n { id: "3671", lang: "it", name: "Pesca" },\n { id: "3671", lang: "en", name: "Peach" },\n { id: "124", lang: "it", name: "Anguria" },\n { id: "124", lang: "en", name: "Watermelon" },\n];\n\nconst o = {};\n\nfruits.forEach((f) => {\n if (!o[f.id]) {\n // create object if id is not recognized\n o[f.id] = { id: f.id, language: [] };\n }\n // add language\n o[f.id].language.push({ lang: f.lang, name: f.name });\n});\n\n// get array without the key\nconst arr = Object.values(o);\n\nconsole.log(arr);Run Code Online (Sandbox Code Playgroud)\r\n这是一个使用它根据name时间进行排序的示例lang"it"
const fruits = [\n { id: "645", lang: "it", name: "Banana" },\n { id: "3671", lang: "it", name: "Pesca" },\n { id: "3671", lang: "en", name: "Peach" },\n { id: "124", lang: "it", name: "Anguria" },\n { id: "124", lang: "en", name: "Watermelon" },\n];\n\nconst o = {};\n\nfruits.forEach((f) => {\n if (!o[f.id]) {\n // create object if id is not recognized\n o[f.id] = { id: f.id, language: [], $sort: "\xee\xa0\xba" };\n }\n // add language\n o[f.id].language.push({ lang: f.lang, name: f.name });\n\n // custom sort\n if (f.lang === "it") {\n o[f.id].$sort = f.name;\n }\n});\n\n// get array without the key\nconst arr = Object.values(o).sort((a, b) => a.$sort - b.$sort);\n\nconsole.log(arr);Run Code Online (Sandbox Code Playgroud)\r\n这里有一个小技巧,$sort: "\xee\xa0\xba"默认的$sortto\xee\xa0\xba被称为私人使用字符,并将其自身设置为最后一个字母(在 后面z或什至\xc5\xbe),这将使没有意大利名称的项目出现在最后。此示例$sort在结果中包含我故意留在那里的 ,但您可以将其删除。
示例map:
const arr = Object.values(o)\n .sort((a, b) => a.$sort - b.$sort)\n .map(i => ({\n id: i.id,\n language: i.language\n })\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |