Bon*_*lin 1 javascript dictionary functional-programming
我正在寻找一种方法来获取以下列表:
directory = [
{
name: "Albert",
age: 40,
gender: "M"
},
{
name: "Suzanne",
age: 27,
gender: "F"
},
{
name: "Robert",
age: 19,
gender: "M"
},
{
name: "Connie",
age: 87,
gender: "F"
}
]
Run Code Online (Sandbox Code Playgroud)
并在键上制作字典name:
dictionary = {
"Albert": {
name: "Albert",
age: 40,
gender: "M"
},
"Suzanne": {
name: "Suzanne",
age: 27,
gender: "F"
},
"Robert": {
name: "Robert",
age: 19,
gender: "M"
},
"Connie": {
name: "Connie",
age: 87,
gender: "F"
}
}
Run Code Online (Sandbox Code Playgroud)
这类似于 C#ToDictionary方法。我知道我可以directory在for循环或.each调用中进行迭代,并修改dictionary每次迭代的值。但是,我更愿意进行类似函数式编程的分配,例如
dictionary = directory.toDictionary(p => p.name);
Run Code Online (Sandbox Code Playgroud)
在 ES6 或 lodash 中是否存在这样的方法?
JavascriptMap非常类似于字典。它的实例具有方便has、、、、方法。它也可以通过方法直接迭代。getsetkeysvaluesforEach
Map您可以使用“键值对”数组构造一个。(用引号引起来,因为实际上我们以某种类似元组的方式使用数组)。
要创建一个Map用作字典,您需要执行以下操作:
const directory=[{name:"Albert",age:40,gender:"M"},{name:"Suzanne",age:27,gender:"F"},{name:"Robert",age:19,gender:"M"},{name:"Connie",age:87,gender:"F"}];
const myDict = new Map(
directory.map(p => [p.name, p])
);
console.log("Has Albert:", myDict.has("Albert"))
myDict.forEach(p => { console.log(`${p.name} has age ${p.age}`) });Run Code Online (Sandbox Code Playgroud)
您可以映射键和值,并使用 (upcoming) 从此数组创建对象Object.fromEntries。
var directory = [{ name: "Albert", age: 40, gender: "M" }, { name: "Suzanne", age: 27, gender: "F" }, { name: "Robert", age: 19, gender: "M" }, { name: "Connie", age: 87, gender: "F" }],
result = Object.fromEntries(directory.map(o => [o.name, o]));
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
经典方法
var directory = [{ name: "Albert", age: 40, gender: "M" }, { name: "Suzanne", age: 27, gender: "F" }, { name: "Robert", age: 19, gender: "M" }, { name: "Connie", age: 87, gender: "F" }],
result = Object.assign({}, ...directory.map(o => ({ [o.name]: o })));
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1103 次 |
| 最近记录: |