【问题标题】:Reduce objects from array if object's property contains any of substrings如果对象的属性包含任何子字符串,则从数组中减少对象
【发布时间】:2021-03-11 07:36:43
【问题描述】:

我正在尝试减少数组中的所有对象,即它们的属性“Title”包含单独的 JSON 文件中包含的任何子字符串。我一直在尝试按 objects 属性过滤数组,但它实际上不起作用,reduce() 方法会更好地实现它。

目标是对未排除的对象进行一些数学运算,例如: 如果任何对象的属性 Title 与包含的不同(qa、质量保证、软件测试员),那么我们应该将其删除并且不要将其计算在内

我尝试使用 noobie 方法来实现它,但无法使其正常工作,我认为更好的是通过减少不应该在计算中使用的对象来转换 positionArray,然后进行数学运算。

我的功能

calculateSoftwareExperience: async function () {
      fileToCurate.forEach(candidate => {
        const positionsArray = candidate.softwareIndustryPositions;
        console.log(positionsArray)
        //const reducedArray = positionsArray.reduce(x => x.title)
        
        //console.log(positionsArray)
        if (Array.isArray(positionsArray) && positionsArray.length) {
          // array exists and is not empty
          positionsArray.forEach(position => {
            let title = position.title;
            
            if (titlesIncluded.some(x => title.includes(x))) {
              console.log(title)
              const firstFrom = positionsArray[positionsArray.length - 1].from;
              const lastTo = positionsArray[0].to;
              let diff = lastTo - firstFrom;
              let days = (diff * 1000) / (60 * 60 * 24 * 1000) / 1000;
              let months = Math.floor(days / 31);
              //console.log(firstFrom, "to", lastTo, "diff = ", months);
              candidate.softwareIndustryExp = months;
              //console.log(months)
            }
          });
        } else {
          candidate.softwareIndustryExp = 0;
        }
      });
    },

positionsArray 输出

[
  {
    flagged: false,
    from: 2019-10-31T23:00:00.000Z,
    to: 2020-01-31T23:00:00.000Z,
    title: 'junior manual tester'
  },
  {
    flagged: false,
    from: 2018-05-31T22:00:00.000Z,
    to: 2019-09-30T22:00:00.000Z,
    title: 'junior administrator'
  },
  {
    flagged: false,
    from: 2016-03-31T22:00:00.000Z,
    to: 2016-03-31T22:00:00.000Z,
    title: 'praktykant'
  }
]

带子串的输入

    "titlesIncluded": [
        "qa",
        "quality engineer",
        "qa automation",
        "software tester",
        "qa engineer"
    ],

【问题讨论】:

    标签: javascript arrays javascript-objects


    【解决方案1】:

    我找不到使用 reduce() 方法的方法,但我以我的菜鸟方式完成了它。我所做的基本上是创建新对象并按属性标题过滤,然后将每个对象推入数组并进行适当的数学运算。代码如下:

        calculateSoftwareExperience: async function () {
          fileToCurate.forEach(candidate => {
            const positionsArray = candidate.softwareIndustryPositions;
    
            if (Array.isArray(positionsArray) && positionsArray.length) {
              let roletypeArray = [];
              positionsArray.forEach(position => {
                let title = position.title;
                if (titlesIncluded.some(x => title.includes(x))) {
                  let pos = {};
                  pos.title = title;
                  pos.from = position.from;
                  pos.to = position.to;
                  roletypeArray.push(position);
                }
              });
    
              if (Array.isArray(roletypeArray) && roletypeArray.length) {
                const firstFrom = roletypeArray[roletypeArray.length - 1].from;
                const lastTo = roletypeArray[0].to;
                let diff = lastTo - firstFrom;
                let days = (diff * 1000) / (60 * 60 * 24 * 1000) / 1000;
                let months = Math.floor(days / 31);
                candidate.softwareIndustryExp = months;
              } else {
                candidate.softwareIndustryExp = 0;
              }
            } else {
              candidate.softwareIndustryExp = 0;
            }
          });
        },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 2019-06-06
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 2020-06-01
      相关资源
      最近更新 更多