尝试编写逻辑,如果对象路径相同,则应该在数组中创建一个对象,并用name
逗号分隔,如何使用reduce来实现这一任务?
main.js
var data = [
{id: "param", name: "IGetRefillMultiPlanParam", path: "@combinator-interfaces/dist/drug/GetRefills/GetRefills.Model.ts"}
{id: "details", name: "IRefills", path: "@combinator-interfaces/dist/drug/GetRefills/GetRefills.Model.ts"}
{id: "header", name: "IHeader", path: "@combinator-interfaces/dist/common/Header.Model.ts"}
]
function buildInterface (data) {
var interfaceArray = [];
data.reduce(function(acc,arr){
var filePath = acc.path.replace('.ts','');
var imports = data.map(d => d.name).join(', ');
if(acc.path.includes(arr.path)) {
interfaceArray.push(`import { ${imports} } from '${filePath}';\n\n`);
}
});
return interfaceArray;
}
预期结果
[
'import { IGetRefillMultiPlanParam, IRefills} from "@combinator-interfaces/dist/drug/GetRefills/GetRefills.Model"',
'import { IHeader } from "@combinator-interfaces/dist/common/Header.Model"'
]
最佳答案
您错误地使用了reduce
。看一下这个,如果您有任何问题,请询问。
const data = [
{
id: "param",
name: "IGetRefillMultiPlanParam",
path: "@combinator-interfaces/dist/drug/GetRefills/GetRefills.Model.ts"
},
{
id: "details",
name: "IRefills",
path: "@combinator-interfaces/dist/drug/GetRefills/GetRefills.Model.ts"
},
{
id: "header",
name: "IHeader",
path: "@combinator-interfaces/dist/common/Header.Model.ts"
},
];
function buildInterface (data) {
const parsed = data.reduce((map, importing) => {
if (!map[importing.path]) {
map[importing.path] = [];
}
const list = map[importing.path];
list.push(importing.name);
return map;
}, {});
console.log('parsed', parsed);
return Object.entries(parsed).map(([importPath, toImport]) => {
return `import { ${toImport.join(', ')} } from '${importPath.replace('.ts','')}'`;
});
}
console.log(buildInterface(data));
关于javascript - 如何使用reduce查找元素并构建数组对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58189354/