Javascript/nodejs使用嵌套数组动态构建JS对象 [英] Javascript/nodejs dynamically build JS object with nested arrays

查看:44
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆