【问题标题】:How to have value as an array in Javascript Map?如何在Javascript Map中将值作为数组?
【发布时间】:2017-11-17 15:28:25
【问题描述】:

我需要一个包含键和对应值作为数组的映射,我该怎么做?

[
{
"language": "english",    
"movie_name": "die-hard",
"movie_size": 89
},{
"language": "english",
"movie_name": "inception",
"movie_size": 40
},{
"language": "english",
"movie_name": "Lionking",
"movie_size": 50
},{
"language": "spanish",
"movie_name": "L'amour",
"movie_size": 10
},
{
"language": "spanish",
"movie_name": "L'amour",
"movie_size": 65
},{
"language": "english",
"movie_name": "inception",
"movie_size": 70
},{
"language": "english",
"movie_name": "die-hard",
"movie_size": 62
}
]

上面是我的数据结构,下面是我的代码,我可以形成一张地图,打印每种语言的电影数量。

我有一个代码fiddle,它当前将以下内容打印到控制台

 Map{
'english' => Map {'die-hard' => 2, 'inception' => 2, 'Lionking' => 1},
'spanish' => Map {'L'amour' => 2} }

但我想根据电影大小计算百分位数,为此我需要基于语言的特定电影名称的所有电影大小。我不确定如何实现。

【问题讨论】:

  • 具有键和对应值作为数组的映射所以一个具有属性/键及其值的对象是数组?
  • 您期望的输出是什么?
  • 请单击<> 并在minimal reproducible example 中提供您拥有的代码以及预期输出示例
  • @mplungjan Code at jsfiddle jsfiddle.net/xdhun1m3 ,上面的代码工作并打印上面的输出。
  • @Mamun 我期望计算电影大小的百分位数。为此,我需要与 jsfiddle 处的电影名称代码对应的所有值:jsfiddle.net/xdhun1m3 我期望的输出是因为我将在数组上调用一个百分位数方法,该数组包含电影大小值或特定电影名称,例如顽固=> 89(假设 89 是百分位函数的输出)

标签: javascript arrays node.js multidimensional-array hashmap


【解决方案1】:

将值设置为数组[].push 以向其中添加项目:

array = [ { "language": "english", "movie_name": "die-hard-4k"   , "movie_size": 89 }, 
          { "language": "english", "movie_name": "inception-1080", "movie_size": 40 },
          { "language": "english", "movie_name": "Lionking-4k"   , "movie_size": 50 },
          { "language": "spanish", "movie_name": "L'amour-1080"  , "movie_size": 10 },
          { "language": "spanish", "movie_name": "L'amour-4k"    , "movie_size": 65 },
          { "language": "english", "movie_name": "inception-4k"  , "movie_size": 70 },
          { "language": "english", "movie_name": "die-hard-1080" , "movie_size": 62 } ]

result = {}
for (item of array) {
  language = result[item.language] || (result[item.language] = {})
  movie_name = item.movie_name.replace(/-[^-]*$/, '')
  movie_size = language[movie_name] || (language[movie_name] = [])
  movie_size.push(item.movie_size)
}

console.log(result)

【讨论】:

  • 上述工作就像一个魅力并且确实需要,对于任何处理嵌套 json 并希望基于某些属性进行映射的人来说,这可能是一个理想的解决方案。
猜你喜欢
  • 1970-01-01
  • 2021-04-24
  • 2019-08-23
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
相关资源
最近更新 更多