javascript - 如何使用reduce查找元素并构建数组对象?

标签 javascript arrays angular reduce

尝试编写逻辑,如果对象路径相同,则应该在数组中创建一个对象,并用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/

相关文章:

javascript - 使用 Knockoutjs 将某些数据绑定(bind)值转换为 Json

java - 整数迭代帮助 java

java - 二维数组问题

angular - 使用 Angular 来使用 Microsoft Speech API

css - Angular :元素自动滚动

javascript - 动态改变 JavaScript 原型(prototype)会导致问题

javascript - jQuery 从数组中设置元素 li 数据

javascript - Chrome 扩展,存储数据

javascript - 使用多个下拉菜单更改 p 标签类

angular - nvd3 Angular2 动态更改图表选项