javascript - 将员工数组转换为字典
问题描述
所以我目前正在使用LinqJS库来实现以下目标:
var allEmployees = [
{
"Id": 1374,
"FirstName": "John",
"LastName": "Doe"
},
{
"Id": 1375,
"FirstName": "Jane",
"LastName": "Doe"
}
];
var employeeDictionary = Enumerable.from(allEmployees).toDictionary("$.Id", "$.FirstName+' '+$.LastName").toEnumerable().toArray();
序列化为employeeDictionary
JSON 时,我得到以下格式:
[
{
"key": 1374,
"value": "John Doe"
},
{
"key": 1375,
"value": "Jane Doe"
}
]
我不希望我的数据采用这种格式,我希望它采用这种格式:
{
"1374": "John Doe",
"1375": "Jane Doe"
}
我使用YaLinqo在 PHP 中编写了类似的东西,这给了我需要的结果:
echo json_encode(from($employees)->toDictionary('$v["Id"]', '$v["FirstName"]." ".$v["LastName"]')->toArray());
但是,我希望能够在我的 JavaScript 中实现这一点。
解决方案
在 JavaScript 中,数组严格来说始终是数字索引结构。所以,.toArray
遵守它。在 PHP 中,数组更接近于 JavaScript 所认为的普通对象。
您可以使用该.toObject
方法生成格式的对象 - 您需要传入两个函数 - 键选择器和值选择器,以便使用正确的数据构建对象:
var allEmployees = [
{
"Id": 1374,
"FirstName": "John",
"LastName": "Doe"
},
{
"Id": 1375,
"FirstName": "Jane",
"LastName": "Doe"
}
];
var employeeDictionary = Enumerable.from(allEmployees)
.toDictionary("$.Id", "$.FirstName+' '+$.LastName")
.toEnumerable()
.toObject(entry => entry.key, entry => entry.value);
/* output:
{
"1374": "John Doe",
"1375": "Jane Doe"
}
*/
使用解构,键/值选择器可以转换为:
.toObject(({key}) => key, ({value}) => value);
如果将此库用于 LINQ 操作,则需要稍微更改语法:
var allEmployees = [
{
"Id": 1374,
"FirstName": "John",
"LastName": "Doe"
},
{
"Id": 1375,
"FirstName": "Jane",
"LastName": "Doe"
}
];
var employeeDictionary = Enumerable.From(allEmployees)
.ToDictionary("$.Id", "$.FirstName+' '+$.LastName")
.ToEnumerable()
.ToObject("$.Key", "$.Value");
/* output:
{
"1374": "John Doe",
"1375": "Jane Doe"
}
*/
推荐阅读
- amazon-web-services - 如何将 Sagemaker 笔记本放到 GitHub 上?
- python-3.x - 如何从以下列表中获得所需的输出?
- date - 有没有办法将两种不同的 dateTime 格式解析为 Java 中的 LocalDateTime 或 Instant?
- javascript - 如何在 Electron 中使用 GET 变量重定向到另一个 HTML 文件?
- r - 如何评估字符串是否是R中的英文单词
- db2 - COBOL DB2 绑定过程
- java - Java:ClassNotFound 类路径问题
- javascript - 如何在 webgl 中用纹理相等地包裹四边形
- c# - 重新启动后自动启动 Microsoft Reporting Services
- c# - 在不退出循环 C# 的情况下验证来自控制台的输入值