如何使用reduce来查找元素并建立数组对象?

问题描述 投票:0回答:1

如果对象路径相同,则尝试编写逻辑,应该在数组中以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"'
]
javascript arrays angular reduce
1个回答
1
投票

您使用的是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));
© www.soinside.com 2019 - 2024. All rights reserved.