javascript - javascript - 将对象数组减少为键值对映射,在值数组中保留重复条目
问题描述
我需要减少对象数组,但减少对象中的特定key
属性,并将具有相同key
值的所有对象放入关联value
数组中的数组中。
我需要的一个例子:
对象
var obj1 = {
name: "server1",
type: "http",
port: "8080"
}
var obj2 = {
name: "server2",
type: "https",
port: "8443"
}
var obj3 = {
name: "server3",
type: "http",
port: "80"
}
// Place objects in an array (as interm step)
var array = [obj1, obj2, obj3];
使用上面的代码,我尝试了
var map = new Map(array.map(server => [server.type, server]));
但这最终给了我:
0: {"http" => Object}
key: "http"
value:
name: "server3"
port: "80"
type: "http"
1: {"https" => Object}
key: "https"
value:
name: "server2"
port: "8443"
type: "https"
但我需要的是:
0: {"http" => Object}
key: "http"
value:[
{
name: "server1"
port: "8080"
type: "http"
},
{
name: "server3"
port: "80"
type: "http"
},
1: {"https" => Object}
key: "https"
value:
name: "server2"
port: "8443"
type: "https"
因此,我可以遍历每个type
,找到所有唯一值,使用 this 作为类型创建每个对象的列表,然后将其添加到地图中,但这对于一个简单的任务来说似乎太多了。
有没有更快/更方便的方法来缩短它?
解决方案
我不确定地图在这里是否合适。您可以使用一个简单的forEach
并检查当前密钥是否已存在于您的数组中。如果不是,则使用当前项目创建一个新对象并检查下一个。
像这样的东西:
var obj1 = {
name: "server1",
type: "http",
port: "8080"
}
var obj2 = {
name: "server2",
type: "https",
port: "8443"
}
var obj3 = {
name: "server3",
type: "http",
port: "80"
}
// Place objects in an array (as interm step)
var array = [obj1, obj2, obj3];
let output = {};
array.forEach((item) => {
// the item does not exists, we create it.
if(!output[item.type]) {
output[item.type] = {key: item.type, value: []};
}
// in either case, we push the current item in the value.
// of the current output key.
output[item.type].value.push(item);
});
// we are using Object.values() because we do not want the keys
// used to generate the output.
console.log(Object.values(output));
推荐阅读
- java - 为什么我的 gif 只有在我单击 ImageView 时才会加载?
- typescript - 在 TypeScript 中,推断动态参数是动态函数的参数
- discord - Discord.py 命令上的命令错误消息
- azure-active-directory - 如何使用 Graph API 通过 id 或 userPrincipalName 获取用户对象?
- typescript - 用于对象的名为 arg 的打字稿
- ffmpeg - 如何使用ffmpeg在视频的最后5秒排除水印覆盖
- pine-script - 如何更改满足我在 Pine Script 中的蜡烛标准/定义的蜡烛的蜡烛颜色?
- react-native - React-native : 自签名认证实现
- r - 将核密度估计提取到 R 中的新样本点
- sql-server - 尝试连接到我的 Docker 实例时在 SSMS 中出现错误 26