首页 > 解决方案 > 如何将数组对象格式化为新对象

问题描述

我正在尝试使用 javascript 将包含数组的对象转换为另一个对象。下面是对象字段的示例以及格式化后的示例。格式化后的数据必须只显示funcName中带有“ABS”的文件

let beforeData = {
  SUMMER: [
    { funcName: '{{WORKING_ABS}}', subject: { en: "Exercice1"} },
    { funcName: '{{PULLS_BODY}}', subject: { en: "Exercice2"} },
  ],
  WINTER: [
    { funcName: '{{FULL_BODY}}', subject: { en: "Exercice3"} },
    { funcName: '{{REST_ABS}}', subject: { en: "Exercice4"} },
  ]
};

我需要对象与这个完全一样

let AfterData ={
  worklinks: [
    {
      name: 'Exercice1',
      link: '{{WORKING_ABS}}',
    },
    {
      name: 'Exercice4',
      link: '{{REST_ABS}}',
    },
  ]
},

我试图制作一个像这样的方法(它只是一个草稿),也许有人会帮助改进这个方法

   export const functTransform = (dataaas) => {  Object.keys(dataaas).map(fiels => ({
     worklinks =>funcName.search("ABS") > -1).map(({funcName, subject}) => ({
        link: funcName,
        name: subject.en
      }))};

我是使用 javascript 的新手,因此非常感谢任何帮助,谢谢。

标签: javascriptarrayssortingmapping

解决方案


你可以这样吗?(用 forEach 减少)

let beforeData = {
  SUMMER: [
    { funcName: '{{WORKING_ABS}}', subject: { en: "Exercice1"} },
    { funcName: '{{PULLS_BODY}}', subject: { en: "Exercice2"} },
  ],
  WINTER: [
    { funcName: '{{FULL_BODY}}', subject: { en: "Exercice3"} },
    { funcName: '{{REST_ABS}}', subject: { en: "Exercice4"} },
  ]
};

function transform(inputData, funcComparator){
  if (funcComparator == undefined){
    funcComparator = (item) => item.funcName.includes("ABS");
  }  
  return Object.values(inputData).reduce((aggArr, arr) => {
    arr.forEach(item => {
      if (funcComparator(item)){
        const itemCopy = {name: item.subject.en, link: item.funcName};
        aggArr.push(itemCopy);
      }
    })
    return aggArr;
  }, []);
}

//use it to find all your "ABS":
console.log(transform(beforeData));

//another example, use it to find all your "BODY":
//console.log(transform(beforeData, (item) => item.funcName.includes("BODY")));

输出:

[
  {
    "name": "Exercice1",
    "link": "{{WORKING_ABS}}"
  },
  {
    "name": "Exercice4",
    "link": "{{REST_ABS}}"
  }
]

推荐阅读