【发布时间】:2021-01-30 18:39:00
【问题描述】:
我正在尝试将视频信息中的以下数据减少到自定义对象结构中,该结构删除“标签”键重复项,但同时保留所有遇到的可用功能。
初始数据如下所示:
[
{
"label": "4320p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "2160p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "2160p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "1440p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "1440p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "1080p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "1080p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "1080p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "1080p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "720p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "720p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "720p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "720p",
"features": {
"HDR": false,
"60fps": false
}
},
{
"label": "720p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "720p",
"features": {
"HDR": false,
"60fps": false
}
},
{
"label": "480p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "480p",
"features": {
"HDR": false,
"60fps": false
}
},
{
"label": "480p",
"features": {
"HDR": false,
"60fps": false
}
},
{
"label": "480p",
"features": {
"HDR": true,
"60fps": false
}
},
{
"label": "360p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "360p",
"features": {
"HDR": false,
"60fps": false
}
},
{
"label": "360p",
"features": {
"HDR": false,
"60fps": false
}
},
{
"label": "360p",
"features": {
"HDR": true,
"60fps": false
}
},
{
"label": "240p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "240p",
"features": {
"HDR": false,
"60fps": false
}
},
{
"label": "240p",
"features": {
"HDR": false,
"60fps": false
}
},
{
"label": "240p",
"features": {
"HDR": true,
"60fps": false
}
},
{
"label": "144p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "144p",
"features": {
"HDR": false,
"60fps": false
}
},
{
"label": "144p",
"features": {
"HDR": false,
"60fps": false
}
},
{
"label": "144p",
"features": {
"HDR": true,
"60fps": false
}
}
]
如您所见,单个分辨率标签有许多对象,但其中一些具有 HDR,而另一些具有 60fps,而另一些可能一个都没有,或者两者都没有。
我想要做的是用下面的 reduce 函数来减少这个数组。
假设resolutions就是上面的Object:
resolutions.reduce((unique, o) => {
if (!unique.some((obj) => obj.label === o.label)) {
unique.push(o);
}
return unique;
}, []);
这给了我以下结构:
[
{
"label": "4320p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "2160p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "1440p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "1080p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "720p",
"features": {
"HDR": false,
"60fps": true
}
},
{
"label": "480p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "360p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "240p",
"features": {
"HDR": true,
"60fps": true
}
},
{
"label": "144p",
"features": {
"HDR": true,
"60fps": true
}
}
]
但是,如果您仔细观察,您会发现在 reduce 操作期间,一些布尔值与每个唯一标签键的第一个元素值合并,我最终需要启用真正的功能,即使其中只有一个是真的。
2160p 标签是一个很好的例子,其中实际上有一个具有 HDR: true 的对象,但最后我只是将它作为 false
您对如何使用现代 JavaScript 管理这种情况有任何想法吗?
【问题讨论】:
标签: javascript object boolean reduce