提问人:john Wallace 提问时间:10/30/2019 更新时间:10/30/2019 访问量:46
对数组进行排序,从多个源创建键值对
Sorting Arrays creating key value pairs from multiple sources
问:
我有一个大型 JSON 数组,我想用它来创建键值对,将 3 个整数组合为一个对项目,将另一个整数组合为第二个对项目。
我是编码的乞丐,所以在此过程中寻找一些好的建议。代码的目的是集成到我的自动化设置中。
我试图将 showid、season 和 episode 作为一个组合整数和 episodeid 以及键值对。
所以对于下面的例子:
新数组 = [{7.2.1 : 272, 7.2.2 : 273}]
数组中的 2 个对象如下:
[
{
"episodes": [
{
"art": {
"season.banner": "image://.jpg/",
"season.poster": "image://.jpg/",
"season.thumb": "image:.tbn/",
"tvshow.banner": ".jpg/",
"tvshow.fanart": "image:jpg/",
"tvshow.poster": "image:jpg/"
},
"episode": 1,
"episodeid": 272,
"file": "test.avi",
"label": "test1",
"originaltitle": "",
"playcount": 0,
"plot": Hello World",
"rating": 8,
"season": 2,
"thumbnail": "image.tbn/",
"title": "test1",
"tvshowid": 7
},
{
"art": {
"season.banner": "image://.jpg/",
"season.poster": "image://.jpg/",
"season.thumb": "image:.tbn/",
"tvshow.banner": ".jpg/",
"tvshow.fanart": "image:jpg/",
"tvshow.poster": "image:jpg/"
},
"episode": 2,
"episodeid": 273,
"file": "test1.avi",
"label": "test1",
"originaltitle": "",
"playcount": 0,
"plot": Hello World",
"rating": 8,
"season": 2,
"thumbnail": "image1.tbn/",
"title": "test2",
"tvshowid": 7
},
]
我尝试使用推送进行排序,但它对我的需求来说太基础了。谁能帮忙?
答:
-1赞
David
10/30/2019
#1
您可以使用 reducer 来获取关系数组:
const collection =
{
"episodes": [
{
"art": {
"season.banner": "image://.jpg/",
"season.poster": "image://.jpg/",
"season.thumb": "image:.tbn/",
"tvshow.banner": ".jpg/",
"tvshow.fanart": "image:jpg/",
"tvshow.poster": "image:jpg/"
},
"episode": 1,
"episodeid": 272,
"file": "test.avi",
"label": "test1",
"originaltitle": "",
"playcount": 0,
"plot": "Hello World",
"rating": 8,
"season": 2,
"thumbnail": "image.tbn/",
"title": "test1",
"tvshowid": 7
},
{
"art": {
"season.banner": "image://.jpg/",
"season.poster": "image://.jpg/",
"season.thumb": "image:.tbn/",
"tvshow.banner": ".jpg/",
"tvshow.fanart": "image:jpg/",
"tvshow.poster": "image:jpg/"
},
"episode": 2,
"episodeid": 273,
"file": "test1.avi",
"label": "test1",
"originaltitle": "",
"playcount": 0,
"plot": "Hello World",
"rating": 8,
"season": 2,
"thumbnail": "image1.tbn/",
"title": "test2",
"tvshowid": 7
},
]
}
relations = collection.episodes.reduce((acc, curr) => {
const relation = {[curr.tvshowid + '.' + curr.season + '.' + curr.episode]: curr.episodeid}
acc = [...acc,relation];
return acc;
},[])
console.log(relations)
评论
0赞
Kobe
10/30/2019
如果始终返回具有相同返回类型的对象,请使用 map,而不是 reduce。另外,为什么要解构 acc 只是为了附加一个项目并返回它?这就是目的。push
-1赞
alexP
10/30/2019
#2
您可以使用 map 创建新数组。
var newarray = oShows.episodes.map( function(o){
return {[o.tvshowid + "." + o.season + "." + o.episode] : o.episodeid};
});
console.log(newarray); //[{7.2.1: 272}, {7.2.2: 273}]
我试图将 showid、season 和 episode 作为一个组合整数......
这是不可能的,因为例如“7.2.1”不是整数。您的密钥将是一个字符串。
0赞
Kobe
10/30/2019
#3
您可以简单地覆盖每个节目,然后覆盖每个剧集,然后使用模板字符串创建每个对象的键:map
map
shows = [{
"episodes": [
{"episode": 1, "episodeid": 272, "season": 2, "tvshowid": 7 },
{"episode": 2, "episodeid": 273, "season": 2, "tvshowid": 7 }
]
}]
const mapped = shows.map(show => show.episodes.map(o => ({
[`${o.tvshowid}.${o.season}.${o.episode}`]: o.episodeid
})))
console.log(mapped)
评论