你怎么称呼这样的方法,是否已经存在实现?
What do you call a method like this and does an implementation already exist?
我最近用打字稿写了这个方法,它接受一个数组并从中构造一个地图。
keyFunc 从数组中获取一个元素并为构造的映射生成一个键。
valFunc 从数组中获取一个元素,并从构造的映射中获取先前的值,并生成一个新值来覆盖先前的值。
initialValue 是映射中每个条目在第一个元素映射到它时初始化的值。
private static toMap<X, Y>(
array: X[],
keyFunc: (element: X) => string,
valFunc: (previousValue: Y, element: X) => Y,
initialValue: Y
): Map<string, Y>
{
const result = new Map<string, Y>();
for (const el of array) {
const key = keyFunc(el);
let oldVal = result.get(key);
if (oldVal === undefined) {
oldVal = initialValue;
}
const newVal = valFunc(oldVal, el);
result.set(key, newVal);
}
return result;
}
我在我的代码中使用了这样的方法:
const countPeopleWithEqualNames = toMap<Person, number>(
/*array*/ allPeople,
/*keyFunc*/ person => person.name,
/*valFunc*/ (previousValue, person) => perviousValue + 1,
/*initialValue*/ 0
);
const howManyAlices = countPeopleWithEqualNames.get('alice');
我想知道 javascript/typescript 中是否已经存在这样的方法。我还想知道如何调用这样的方法。这是某种合并还原,但我希望它有一个合适的名称。
可能 array.reduce 就是您要找的。你的例子可以用它来完成。
编辑:
const toMap = <X, Y>(
array: X[],
keyFunc: (element: X) => string,
valFunc: (previousValue: Y, element: X) => Y,
initialValue: Y
): Map<string, Y> =>
{
return array.reduce<Map<string, Y>>((acc, curr) => {
const key = keyFunc(curr)
let oldVal = acc.get(key);
if (oldVal === undefined) {
oldVal = initialValue;
}
const newVal = valFunc(oldVal, curr);
acc.set(key, newVal);
return acc
}, new Map())
}
我最近用打字稿写了这个方法,它接受一个数组并从中构造一个地图。 keyFunc 从数组中获取一个元素并为构造的映射生成一个键。 valFunc 从数组中获取一个元素,并从构造的映射中获取先前的值,并生成一个新值来覆盖先前的值。 initialValue 是映射中每个条目在第一个元素映射到它时初始化的值。
private static toMap<X, Y>(
array: X[],
keyFunc: (element: X) => string,
valFunc: (previousValue: Y, element: X) => Y,
initialValue: Y
): Map<string, Y>
{
const result = new Map<string, Y>();
for (const el of array) {
const key = keyFunc(el);
let oldVal = result.get(key);
if (oldVal === undefined) {
oldVal = initialValue;
}
const newVal = valFunc(oldVal, el);
result.set(key, newVal);
}
return result;
}
我在我的代码中使用了这样的方法:
const countPeopleWithEqualNames = toMap<Person, number>(
/*array*/ allPeople,
/*keyFunc*/ person => person.name,
/*valFunc*/ (previousValue, person) => perviousValue + 1,
/*initialValue*/ 0
);
const howManyAlices = countPeopleWithEqualNames.get('alice');
我想知道 javascript/typescript 中是否已经存在这样的方法。我还想知道如何调用这样的方法。这是某种合并还原,但我希望它有一个合适的名称。
可能 array.reduce 就是您要找的。你的例子可以用它来完成。
编辑:
const toMap = <X, Y>(
array: X[],
keyFunc: (element: X) => string,
valFunc: (previousValue: Y, element: X) => Y,
initialValue: Y
): Map<string, Y> =>
{
return array.reduce<Map<string, Y>>((acc, curr) => {
const key = keyFunc(curr)
let oldVal = acc.get(key);
if (oldVal === undefined) {
oldVal = initialValue;
}
const newVal = valFunc(oldVal, curr);
acc.set(key, newVal);
return acc
}, new Map())
}