Javascript/nodejs使用嵌套数组动态构建JS对象 [英] Javascript/nodejs dynamically build JS object with nested arrays
本文介绍了Javascript/nodejs使用嵌套数组动态构建JS对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个这样的Js对象数组:
I have an array of Js objects like this:
const source =
[ { title: 'Expanse', season: 1, episode: 1, path: 'download.mkv' }
, { title: 'Expanse', season: 1, episode: 2, path: 'download.mkv' }
, { title: 'GoT', season: 7, episode: 1, path: 'download.mkv' }
, { title: 'GoT', season: 8, episode: 1, path: 'download.mkv' }
, { title: 'GoT', season: 8, episode: 4, path: 'download.mkv' }
]
我正在尝试读取此数组并创建一个对象,该对象将保存所有数据,如下所示:因此,我可以轻松地从每个节点检索所有相关数据.
我已经尝试了几天,但似乎无法正常工作,请帮助一个NUBE!在开始的时候,我以为我可以做
I'm trying to read this array and create one object the will hold all the data, like this: so from each node, i can easily retrieve all the relevant data.
I've been trying to do this for a few days, but cant seem to get it to work, PLEASE HELP a NUBE! at the beging I thought I could just do
videos["Expanse"]["season"]["episode"]["path"] = "..."
它将创建所有密钥(有点像firebase实时数据库,但显然不那么容易)
it will create all the keys (kind of like firebase realtime database but apparently it not as easy)
const videos =
[ { title: 'Expanse', seasons:
[ { season: 'season 1', episodes:
[ { name: 'episode 1', path: 'download.mkv' }
, { name: 'episode 2', path: 'download.mkv' }
] } ] }
, { title: 'GoT', seasons:
[ { season: 'season 7', episodes:
[ { name: 'episode 1', path: 'download.mkv' }
] }
, { season: 'season 8', episodes:
[ { name: 'episode 1', path: 'download.mkv' }
, { name: 'episode 4', path: 'download.mkv' }
] } ] } ]
推荐答案
简单"这样...
const source =
[ { title: 'Expanse', season: 1, episode: 1, path: 'download.mkv'}
, { title: 'Expanse', season: 1, episode: 2, path: 'download.mkv'}
, { title: 'GoT', season: 7, episode: 1, path: 'download.mkv'}
, { title: 'GoT', season: 8, episode: 1, path: 'download.mkv'}
, { title: 'GoT', season: 8, episode: 4, path: 'download.mkv'}
]
const result = source.reduce((a,{title,season,episode,...more} )=>
{
let titleX = a.find(x=>x.title===title)
if (!titleX)
{
titleX = { title, seasons:[] }
a.push(titleX)
}
let seasonX = titleX.seasons.find(x=>x.season===`season ${season}`)
if (!seasonX)
{
seasonX = { season:`season ${season}`, episodes:[] }
titleX.seasons.push(seasonX)
}
seasonX.episodes.push({ name:`episode ${episode}`, ...more })
return a
},[])
console.log( result )
.as-console-wrapper { max-height: 100% !important; top: 0; }
这篇关于Javascript/nodejs使用嵌套数组动态构建JS对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文