简体   繁体   English

map 在 function 之上,这实际上是一个函数数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM