[英]map over a function which is actually an array of functions
The problem is kind of easy to explain, lets say we have the following function:这个问题很容易解释,假设我们有以下 function:
const patterns = (item) => [
`${item.name}/${item.familyName}`,
`${item.name}${c.item.familyName}`,
`${item.familyName}`,
];
I would love to map it and create an object which has both the result of the function + the line that originated it.我很想对它进行 map 并创建一个 object ,它既有 function 的结果+产生它的行。
For example:例如:
Item = { "Luis", "García" }
Expected output:预期 output:
[
value: "Luis/García", pattern: `{name}/{familyName}`,
value: "LuisGarcía", pattern: `{name}{familyName}`,
value: "García", pattern: `{familyName}`
]
Pseudo code not working (of course)伪代码不起作用(当然)
patterns().map(x=> {return {value:x(item) pattern=x(translator) } }
Where translator is:翻译器在哪里:
{name: "{name}", familyName: "{familyName}"
The second part seems right, the problem is that it seems not possible to do a for each of the function array.第二部分似乎是正确的,问题是似乎不可能为每个 function 数组做一个。
Any ideas?有任何想法吗?
Edited Try this:编辑试试这个:
const patterns = (item) => [
`${item.name}/${item.familyName}`,
`${item.name}${item.familyName}`,
`${item.familyName}`,
];
const patternMatcher = [
{value:(item) => `${item.name}/${item.familyName}`, pattern: `{name}/{familyName}`},
{value:(item) => `${item.name}${item.familyName}`, pattern:`{name}{familyName}`},
{value:(item) => `${item.familyName}`, pattern:`{familyName}`},
];
const inputParam = {name:"Luis",familyName: "Garcia"};
const result = patterns(inputParam).map(resultItem => {
const pattern = patternMatcher.find(obj => obj.value(inputParam) === resultItem).pattern;
return {value:resultItem, pattern}
});
JavaScript: JavaScript:
const patterns = (item) => [
`${item.name}/${item.familyName}`,
`${item.name}${item.familyName}`,
`${item.familyName}`,
];
const patternsArray = patterns({ name: '{name}', familyName: '{familyName}' });
const valueArray = patterns({ name: 'Luis', familyName: 'Garcia' });
const resultsArray = [];
for (let i = 0; i < valueArray.length; i++) {
resultsArray.push({
value: valueArray[i],
pattern: patternsArray[i],
});
}
console.log(resultsArray);
Output: Output:
[ { value: 'Luis/Garcia', pattern: '{name}/{familyName}' },
{ value: 'LuisGarcia', pattern: '{name}{familyName}' },
{ value: 'Garcia', pattern: '{familyName}' } ]
One (ugly) way to do it, is to have the function as an array of functions at the begining:一种(丑陋的)方法是在开始时将 function 作为函数数组:
const patterns =[ (item) => ${item.name}/${item.familyName}
, (item) => ${item.name}${c.item.familyName}
, (item) => ${item.familyName}
, ];常量模式 =[ (item) =>
${item.name}/${item.familyName}
, (item) => ${item.name}${c.item.familyName}
, (item) => ${item.familyName}
, ];
Then patterns.map works (without ())然后patterns.map工作(没有())
But would love to be able to solve the problem without modifying the initial function!但是希望能够在不修改初始功能的情况下解决问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.